Konstantin K. Oblaukhov 5 år sedan
förälder
incheckning
063730cee4
4 ändrade filer med 63 tillägg och 15 borttagningar
  1. 18 9
      cmake/FindCMSIS.cmake
  2. 15 5
      cmake/stm32/common.cmake
  3. 29 0
      cmake/stm32/l0.cmake
  4. 1 1
      tests/cmsis/CMakeLists.txt

+ 18 - 9
cmake/FindCMSIS.cmake

@@ -1,5 +1,5 @@
 if(NOT CMSIS_FIND_COMPONENTS)
 if(NOT CMSIS_FIND_COMPONENTS)
-    set(CMSIS_FIND_COMPONENTS STM32F0 STM32G0 STM32F1 STM32F4)
+    set(CMSIS_FIND_COMPONENTS STM32F0 STM32G0 STM32L0 STM32F1 STM32F4)
 endif()
 endif()
 
 
 include(stm32/devices)
 include(stm32/devices)
@@ -50,28 +50,37 @@ foreach(COMP ${CMSIS_FIND_COMPONENTS})
         set(STM32_CUBE_${FAMILY}_PATH /opt/STM32Cube_FW_${FAMILY} CACHE PATH "Path to STM32Cube_FW_${FAMILY}")
         set(STM32_CUBE_${FAMILY}_PATH /opt/STM32Cube_FW_${FAMILY} CACHE PATH "Path to STM32Cube_FW_${FAMILY}")
         message(STATUS "No STM32_CUBE_${FAMILY}_PATH specified using default: ${STM32_CUBE_${FAMILY}_PATH}")
         message(STATUS "No STM32_CUBE_${FAMILY}_PATH specified using default: ${STM32_CUBE_${FAMILY}_PATH}")
     endif()
     endif()
-    
+        
     find_path(CMSIS_${FAMILY}_PATH
     find_path(CMSIS_${FAMILY}_PATH
-        NAMES ARM.CMSIS.pdsc
+        NAMES Include/cmsis_gcc.h
         PATHS "${STM32_CUBE_${FAMILY}_PATH}/Drivers/CMSIS"
         PATHS "${STM32_CUBE_${FAMILY}_PATH}/Drivers/CMSIS"
         NO_DEFAULT_PATH
         NO_DEFAULT_PATH
     )
     )
-    
     if (NOT CMSIS_${FAMILY}_PATH)
     if (NOT CMSIS_${FAMILY}_PATH)
         continue()
         continue()
     endif()
     endif()
     
     
     if(NOT CMSIS_${FAMILY}_VERSION)
     if(NOT CMSIS_${FAMILY}_VERSION)
-        file(STRINGS "${CMSIS_${FAMILY}_PATH}/ARM.CMSIS.pdsc" VERSION_STRINGS REGEX "<release version=\"([0-9]*\\.[0-9]*\\.[0-9]*)\" date=\"[0-9]+\\-[0-9]+\\-[0-9]+\">")
-        list(GET VERSION_STRINGS 0 STR)
-        string(REGEX MATCH "<release version=\"([0-9]*)\\.([0-9]*)\\.([0-9]*)\" date=\"[0-9]+\\-[0-9]+\\-[0-9]+\">" MATCHED ${STR})
-        set(CMSIS_${FAMILY}_VERSION "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}" CACHE INTERNAL "CMSIS STM32${FAMILY} version")
+        find_file(CMSIS_${FAMILY}_PDSC
+            NAMES ARM.CMSIS.pdsc
+            PATHS "${CMSIS_${FAMILY}_PATH}"
+            NO_DEFAULT_PATH
+        )
+        if (NOT CMSIS_${FAMILY}_PDSC)
+            set(CMSIS_${FAMILY}_VERSION "0.0.0")
+        else()
+            file(STRINGS "${CMSIS_${FAMILY}_PDSC}" VERSION_STRINGS REGEX "<release version=\"([0-9]*\\.[0-9]*\\.[0-9]*)\" date=\"[0-9]+\\-[0-9]+\\-[0-9]+\">")
+            list(GET VERSION_STRINGS 0 STR)
+            string(REGEX MATCH "<release version=\"([0-9]*)\\.([0-9]*)\\.([0-9]*)\" date=\"[0-9]+\\-[0-9]+\\-[0-9]+\">" MATCHED ${STR})
+            set(CMSIS_${FAMILY}_VERSION "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}" CACHE INTERNAL "CMSIS STM32${FAMILY} version")
+        endif()
     endif()
     endif()
+    
     set(CMSIS_${COMP}_VERSION ${CMSIS_${FAMILY}_VERSION})
     set(CMSIS_${COMP}_VERSION ${CMSIS_${FAMILY}_VERSION})
     set(CMSIS_VERSION ${CMSIS_${COMP}_VERSION})
     set(CMSIS_VERSION ${CMSIS_${COMP}_VERSION})
     
     
     find_path(CMSIS_${FAMILY}_COMMON_INCLUDE
     find_path(CMSIS_${FAMILY}_COMMON_INCLUDE
-        NAMES cmsis_version.h
+        NAMES cmsis_gcc.h
         PATHS "${CMSIS_${FAMILY}_PATH}/Include"
         PATHS "${CMSIS_${FAMILY}_PATH}/Include"
         NO_DEFAULT_PATH
         NO_DEFAULT_PATH
     )
     )

+ 15 - 5
cmake/stm32/common.cmake

@@ -69,9 +69,11 @@ function(stm32_get_memory_info FAMILY DEVICE
     FLASH_SIZE RAM_SIZE CCRAM_SIZE STACK_SIZE HEAP_SIZE 
     FLASH_SIZE RAM_SIZE CCRAM_SIZE STACK_SIZE HEAP_SIZE 
     FLASH_ORIGIN RAM_ORIGIN CCRAM_ORIGIN
     FLASH_ORIGIN RAM_ORIGIN CCRAM_ORIGIN
 )
 )
-    string(REGEX REPLACE "^[FGHL][0-9][0-9][0-9].([468BCDEFGHI])$" "\\1" SIZE_CODE ${DEVICE})
+    string(REGEX REPLACE "^[FGHL][0-9][0-9][0-9].([3468BCDEFGHIZ])$" "\\1" SIZE_CODE ${DEVICE})
     
     
-    if(SIZE_CODE STREQUAL "4")
+    if(SIZE_CODE STREQUAL "3")
+        set(FLASH "8K")
+    elseif(SIZE_CODE STREQUAL "4")
         set(FLASH "16K")
         set(FLASH "16K")
     elseif(SIZE_CODE STREQUAL "6")
     elseif(SIZE_CODE STREQUAL "6")
         set(FLASH "32K")
         set(FLASH "32K")
@@ -93,6 +95,8 @@ function(stm32_get_memory_info FAMILY DEVICE
         set(FLASH "1536K")
         set(FLASH "1536K")
     elseif(SIZE_CODE STREQUAL "I")
     elseif(SIZE_CODE STREQUAL "I")
         set(FLASH "2048K")
         set(FLASH "2048K")
+    elseif(SIZE_CODE STREQUAL "Z")
+        set(FLASH "192K")
     else()
     else()
         set(FLASH "16K")
         set(FLASH "16K")
         message(WARNING "Unknow flash size for device ${DEVICE}")
         message(WARNING "Unknow flash size for device ${DEVICE}")
@@ -106,13 +110,18 @@ function(stm32_get_memory_info FAMILY DEVICE
     if(FAMILY STREQUAL "F1")
     if(FAMILY STREQUAL "F1")
         stm32f1_get_memory_info(${DEVICE} ${TYPE} FLASH RAM)
         stm32f1_get_memory_info(${DEVICE} ${TYPE} FLASH RAM)
     endif()
     endif()
-    
 
 
     set(${FLASH_SIZE} ${FLASH} PARENT_SCOPE)
     set(${FLASH_SIZE} ${FLASH} PARENT_SCOPE)
     set(${RAM_SIZE} ${RAM} PARENT_SCOPE)
     set(${RAM_SIZE} ${RAM} PARENT_SCOPE)
     set(${CCRAM_SIZE} ${CCRAM} PARENT_SCOPE)
     set(${CCRAM_SIZE} ${CCRAM} PARENT_SCOPE)
-    set(${STACK_SIZE} 0x400 PARENT_SCOPE)
-    set(${HEAP_SIZE} 0x200 PARENT_SCOPE)
+    if (RAM STREQUAL "2K")
+        # Potato MCUs
+        set(${STACK_SIZE} 0x200 PARENT_SCOPE)
+        set(${HEAP_SIZE} 0x100 PARENT_SCOPE)
+    else()
+        set(${STACK_SIZE} 0x400 PARENT_SCOPE)
+        set(${HEAP_SIZE} 0x200 PARENT_SCOPE)
+    endif()
     set(${FLASH_ORIGIN} 0x8000000 PARENT_SCOPE)
     set(${FLASH_ORIGIN} 0x8000000 PARENT_SCOPE)
     set(${RAM_ORIGIN} 0x20000000 PARENT_SCOPE)
     set(${RAM_ORIGIN} 0x20000000 PARENT_SCOPE)
     set(${CCRAM_ORIGIN} 0x10000000 PARENT_SCOPE)
     set(${CCRAM_ORIGIN} 0x10000000 PARENT_SCOPE)
@@ -132,6 +141,7 @@ endif()
 include(stm32/utilities)
 include(stm32/utilities)
 include(stm32/f0)
 include(stm32/f0)
 include(stm32/g0)
 include(stm32/g0)
+include(stm32/l0)
 include(stm32/f1)
 include(stm32/f1)
 include(stm32/f4)
 include(stm32/f4)
 
 

+ 29 - 0
cmake/stm32/l0.cmake

@@ -0,0 +1,29 @@
+set(STM32_L0_TYPES 
+    L010x4 L010x6 L010x8 L010xB L011xx L021xx L031xx L041xx
+    L051xx L052xx L053xx L061xx L062xx L063xx L071xx L072xx
+    L073xx L081xx L082xx L083xx
+)
+set(STM32_L0_TYPE_MATCH 
+    "L010.4" "L010.6" "L010.8" "L010.B" "L011.." "L021.." "L031.." "L041.."
+    "L051.." "L052.." "L053.." "L061.." "L062.." "L063.." "L071.." "L072.."
+    "L073.." "L081.." "L082.." "L083.."
+)
+set(STM32_L0_RAM_SIZES 
+     2K  8K  8K 20K  2K  2K  8K  8K
+     8K  8K  8K  8K  8K  8K 20K 20K
+    20K 20K 20K 20K
+)
+set(STM32_L0_CCRAM_SIZES 
+     0K  0K  0K  0K  0K  0K  0K  0K
+     0K  0K  0K  0K  0K  0K  0K  0K
+     0K  0K  0K  0K  
+)
+
+stm32_util_create_family_targets(L0)
+
+target_compile_options(STM32::L0 INTERFACE 
+    -mcpu=cortex-m0plus
+)
+target_link_options(STM32::L0 INTERFACE 
+    -mcpu=cortex-m0plus
+)

+ 1 - 1
tests/cmsis/CMakeLists.txt

@@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.8)
 set(CMAKE_TOOLCHAIN_FILE ${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/stm32_gcc.cmake)
 set(CMAKE_TOOLCHAIN_FILE ${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/stm32_gcc.cmake)
 
 
 if(NOT TEST_FAMILIES)
 if(NOT TEST_FAMILIES)
-    set(TEST_FAMILIES F0 G0 F1 F4)
+    set(TEST_FAMILIES F0 G0 L0 F1 F4)
 endif()
 endif()
 
 
 project(cmsis-test C ASM)
 project(cmsis-test C ASM)