# Compiler options here.\r
ifeq ($(USE_OPT),)\r
USE_OPT = -Og -ggdb -fomit-frame-pointer -falign-functions=16 -mtune=cortex-m4\r
+# USE_OPT = -Os -fomit-frame-pointer -falign-functions=16 -mtune=cortex-m4\r
endif\r
\r
# C specific options here (added to USE_OPT).\r
# Stack size to be allocated to the Cortex-M process stack. This stack is\r
# the stack used by the main() thread.\r
ifeq ($(USE_PROCESS_STACKSIZE),)\r
- USE_PROCESS_STACKSIZE = 4096\r
+ USE_PROCESS_STACKSIZE = 2048\r
endif\r
\r
# Stack size to the allocated to the Cortex-M main/exceptions stack. This\r
include $(CHIBIOS)/os/common/startup/ARMCMx/compilers/GCC/mk/startup_stm32l4xx.mk\r
# HAL-OSAL files (optional).\r
include $(CHIBIOS)/os/hal/hal.mk\r
-#include $(CHIBIOS)/os/hal/ports/STM32/STM32L4xx/platform.mk\r
-#include $(CHIBIOS)/os/hal/boards/ST_STM32L476_DISCOVERY/board.mk\r
-include $(CHIBIOS)/os/hal/boards/ST_NUCLEO32_L432KC/board.mk\r
-include $(CHIBIOS)/os/hal/ports/STM32/STM32L4xx/platform_l432.mk\r
+include $(CHIBIOS)/os/hal/ports/STM32/STM32L4xx/platform.mk\r
+include $(CHIBIOS)/os/hal/boards/ST_STM32L476_DISCOVERY/board.mk\r
+#include $(CHIBIOS)/os/hal/boards/ST_NUCLEO32_L432KC/board.mk\r
+#include $(CHIBIOS)/os/hal/ports/STM32/STM32L4xx/platform_l432.mk\r
include $(CHIBIOS)/os/hal/osal/rt-nil/osal.mk\r
# RTOS files (optional).\r
include $(CHIBIOS)/os/rt/rt.mk\r
\r
# Define linker script file here.\r
#LDSCRIPT= $(STARTUPLD)/STM32L476xG.ld\r
-LDSCRIPT= $(STARTUPLD)/STM32L432xC.ld\r
+LDSCRIPT= STM32L432xC_stmdsp.ld\r
\r
# C sources that can be compiled in ARM or THUMB mode depending on the global\r
# setting.\r
--- /dev/null
+/*\r
+ ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio\r
+\r
+ Licensed under the Apache License, Version 2.0 (the "License");\r
+ you may not use this file except in compliance with the License.\r
+ You may obtain a copy of the License at\r
+\r
+ http://www.apache.org/licenses/LICENSE-2.0\r
+\r
+ Unless required by applicable law or agreed to in writing, software\r
+ distributed under the License is distributed on an "AS IS" BASIS,\r
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ See the License for the specific language governing permissions and\r
+ limitations under the License.\r
+*/\r
+\r
+/*\r
+ * STM32L432xC memory setup.\r
+ */\r
+MEMORY\r
+{\r
+ flash0 (rx) : org = 0x08000000, len = 256k\r
+ flash1 (rx) : org = 0x00000000, len = 0\r
+ flash2 (rx) : org = 0x00000000, len = 0\r
+ flash3 (rx) : org = 0x00000000, len = 0\r
+ flash4 (rx) : org = 0x00000000, len = 0\r
+ flash5 (rx) : org = 0x00000000, len = 0\r
+ flash6 (rx) : org = 0x00000000, len = 0\r
+ flash7 (rx) : org = 0x00000000, len = 0\r
+ ram0 (wx) : org = 0x20000000, len = 48k /* Save 16k of SRAM2 for loaded ELF */\r
+ ram1 (wx) : org = 0x00000000, len = 0\r
+ ram2 (wx) : org = 0x00000000, len = 0\r
+ ram3 (wx) : org = 0x00000000, len = 0\r
+ ram4 (wx) : org = 0x00000000, len = 0\r
+ ram5 (wx) : org = 0x00000000, len = 0\r
+ ram6 (wx) : org = 0x00000000, len = 0\r
+ ram7 (wx) : org = 0x00000000, len = 0\r
+}\r
+\r
+/* For each data/text section two region are defined, a virtual region\r
+ and a load region (_LMA suffix).*/\r
+\r
+/* Flash region to be used for exception vectors.*/\r
+REGION_ALIAS("VECTORS_FLASH", flash0);\r
+REGION_ALIAS("VECTORS_FLASH_LMA", flash0);\r
+\r
+/* Flash region to be used for constructors and destructors.*/\r
+REGION_ALIAS("XTORS_FLASH", flash0);\r
+REGION_ALIAS("XTORS_FLASH_LMA", flash0);\r
+\r
+/* Flash region to be used for code text.*/\r
+REGION_ALIAS("TEXT_FLASH", flash0);\r
+REGION_ALIAS("TEXT_FLASH_LMA", flash0);\r
+\r
+/* Flash region to be used for read only data.*/\r
+REGION_ALIAS("RODATA_FLASH", flash0);\r
+REGION_ALIAS("RODATA_FLASH_LMA", flash0);\r
+\r
+/* Flash region to be used for various.*/\r
+REGION_ALIAS("VARIOUS_FLASH", flash0);\r
+REGION_ALIAS("VARIOUS_FLASH_LMA", flash0);\r
+\r
+/* Flash region to be used for RAM(n) initialization data.*/\r
+REGION_ALIAS("RAM_INIT_FLASH_LMA", flash0);\r
+\r
+/* RAM region to be used for Main stack. This stack accommodates the processing\r
+ of all exceptions and interrupts.*/\r
+REGION_ALIAS("MAIN_STACK_RAM", ram0);\r
+\r
+/* RAM region to be used for the process stack. This is the stack used by\r
+ the main() function.*/\r
+REGION_ALIAS("PROCESS_STACK_RAM", ram0);\r
+\r
+/* RAM region to be used for data segment.*/\r
+REGION_ALIAS("DATA_RAM", ram0);\r
+REGION_ALIAS("DATA_RAM_LMA", flash0);\r
+\r
+/* RAM region to be used for BSS segment.*/\r
+REGION_ALIAS("BSS_RAM", ram0);\r
+\r
+/* RAM region to be used for the default heap.*/\r
+REGION_ALIAS("HEAP_RAM", ram0);\r
+\r
+/* Generic rules inclusion.*/\r
+INCLUDE rules.ld\r
* @note The default is @p TRUE.\r
*/\r
#if !defined(CH_CFG_USE_REGISTRY)\r
-#define CH_CFG_USE_REGISTRY TRUE\r
+#define CH_CFG_USE_REGISTRY FALSE\r
#endif\r
\r
/**\r
* @note The default is @p TRUE.\r
*/\r
#if !defined(CH_CFG_USE_WAITEXIT)\r
-#define CH_CFG_USE_WAITEXIT TRUE\r
+#define CH_CFG_USE_WAITEXIT FALSE\r
#endif\r
\r
/**\r
* @note Requires @p CH_CFG_USE_MUTEXES.\r
*/\r
#if !defined(CH_CFG_USE_CONDVARS)\r
-#define CH_CFG_USE_CONDVARS TRUE\r
+#define CH_CFG_USE_CONDVARS FALSE\r
#endif\r
\r
/**\r
* @note Requires @p CH_CFG_USE_CONDVARS.\r
*/\r
#if !defined(CH_CFG_USE_CONDVARS_TIMEOUT)\r
-#define CH_CFG_USE_CONDVARS_TIMEOUT TRUE\r
+#define CH_CFG_USE_CONDVARS_TIMEOUT FALSE\r
#endif\r
\r
/**\r
* @note Requires @p CH_CFG_USE_EVENTS.\r
*/\r
#if !defined(CH_CFG_USE_EVENTS_TIMEOUT)\r
-#define CH_CFG_USE_EVENTS_TIMEOUT TRUE\r
+#define CH_CFG_USE_EVENTS_TIMEOUT FALSE\r
#endif\r
\r
/**\r
* @note The default is @p TRUE.\r
*/\r
#if !defined(CH_CFG_USE_MESSAGES)\r
-#define CH_CFG_USE_MESSAGES TRUE\r
+#define CH_CFG_USE_MESSAGES FALSE\r
#endif\r
\r
/**\r
* @note Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS.\r
*/\r
#if !defined(CH_CFG_USE_DYNAMIC)\r
-#define CH_CFG_USE_DYNAMIC TRUE\r
+#define CH_CFG_USE_DYNAMIC FALSE\r
#endif\r
\r
/** @} */\r
* @note Requires @p CH_CFG_USE_MEMCORE.\r
*/\r
#if !defined(CH_CFG_MEMCORE_SIZE)\r
-#define CH_CFG_MEMCORE_SIZE 0\r
+#define CH_CFG_MEMCORE_SIZE (3 * 1024)\r
#endif\r
\r
/**\r
* @note The default is @p TRUE.\r
*/\r
#if !defined(CH_CFG_USE_OBJ_FIFOS)\r
-#define CH_CFG_USE_OBJ_FIFOS TRUE\r
+#define CH_CFG_USE_OBJ_FIFOS FALSE\r
#endif\r
\r
/**\r
* @note The default is @p TRUE.\r
*/\r
#if !defined(CH_CFG_USE_PIPES)\r
-#define CH_CFG_USE_PIPES TRUE\r
+#define CH_CFG_USE_PIPES FALSE\r
#endif\r
\r
/**\r
* @note The default is @p TRUE.\r
*/\r
#if !defined(CH_CFG_USE_OBJ_CACHES)\r
-#define CH_CFG_USE_OBJ_CACHES TRUE\r
+#define CH_CFG_USE_OBJ_CACHES FALSE\r
#endif\r
\r
/**\r
* @note The default is @p TRUE.\r
*/\r
#if !defined(CH_CFG_USE_DELEGATES)\r
-#define CH_CFG_USE_DELEGATES TRUE\r
+#define CH_CFG_USE_DELEGATES FALSE\r
#endif\r
\r
/**\r
* @note The default is @p TRUE.\r
*/\r
#if !defined(CH_CFG_USE_JOBS)\r
-#define CH_CFG_USE_JOBS TRUE\r
+#define CH_CFG_USE_JOBS FALSE\r
#endif\r
\r
/** @} */\r
* @note The default is @p FALSE.\r
*/\r
#if !defined(CH_CFG_USE_FACTORY)\r
-#define CH_CFG_USE_FACTORY TRUE\r
+#define CH_CFG_USE_FACTORY FALSE\r
#endif\r
\r
/**\r
* @brief Enables the registry of generic objects.\r
*/\r
#if !defined(CH_CFG_FACTORY_OBJECTS_REGISTRY)\r
-#define CH_CFG_FACTORY_OBJECTS_REGISTRY TRUE\r
+#define CH_CFG_FACTORY_OBJECTS_REGISTRY FALSE\r
#endif\r
\r
/**\r
* @brief Enables factory for generic buffers.\r
*/\r
#if !defined(CH_CFG_FACTORY_GENERIC_BUFFERS)\r
-#define CH_CFG_FACTORY_GENERIC_BUFFERS TRUE\r
+#define CH_CFG_FACTORY_GENERIC_BUFFERS FALSE\r
#endif\r
\r
/**\r
* @brief Enables factory for semaphores.\r
*/\r
#if !defined(CH_CFG_FACTORY_SEMAPHORES)\r
-#define CH_CFG_FACTORY_SEMAPHORES TRUE\r
+#define CH_CFG_FACTORY_SEMAPHORES FALSE\r
#endif\r
\r
/**\r
* @brief Enables factory for mailboxes.\r
*/\r
#if !defined(CH_CFG_FACTORY_MAILBOXES)\r
-#define CH_CFG_FACTORY_MAILBOXES TRUE\r
+#define CH_CFG_FACTORY_MAILBOXES FALSE\r
#endif\r
\r
/**\r
* @brief Enables factory for objects FIFOs.\r
*/\r
#if !defined(CH_CFG_FACTORY_OBJ_FIFOS)\r
-#define CH_CFG_FACTORY_OBJ_FIFOS TRUE\r
+#define CH_CFG_FACTORY_OBJ_FIFOS FALSE\r
#endif\r
\r
/**\r
* @brief Enables factory for Pipes.\r
*/\r
#if !defined(CH_CFG_FACTORY_PIPES) || defined(__DOXYGEN__)\r
-#define CH_CFG_FACTORY_PIPES TRUE\r
+#define CH_CFG_FACTORY_PIPES FALSE\r
#endif\r
\r
/** @} */\r
* @note The default is @p FALSE.\r
*/\r
#if !defined(CH_DBG_ENABLE_ASSERTS)\r
-#define CH_DBG_ENABLE_ASSERTS TRUE\r
+#define CH_DBG_ENABLE_ASSERTS FALSE\r
#endif\r
\r
/**\r
/*===========================================================================*/\r
\r
// Enable syscall support\r
-#define PORT_USE_SYSCALL TRUE\r
+#define PORT_USE_SYSCALL FALSE\r
\r
#endif /* CHCONF_H */\r
\r
* @brief Enables the SERIAL subsystem.\r
*/\r
#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)\r
-#define HAL_USE_SERIAL TRUE\r
+#define HAL_USE_SERIAL FALSE\r
#endif\r
\r
/**\r
* @note Disabling this option saves both code and data space.\r
*/\r
#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__)\r
-#define ADC_USE_WAIT TRUE\r
+#define ADC_USE_WAIT FALSE\r
#endif\r
\r
/**\r
* @note Disabling this option saves both code and data space.\r
*/\r
#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)\r
-#define ADC_USE_MUTUAL_EXCLUSION TRUE\r
+#define ADC_USE_MUTUAL_EXCLUSION FALSE\r
#endif\r
\r
/*===========================================================================*/\r
* @note Disabling this option saves both code and data space.\r
*/\r
#if !defined(DAC_USE_WAIT) || defined(__DOXYGEN__)\r
-#define DAC_USE_WAIT TRUE\r
+#define DAC_USE_WAIT FALSE\r
#endif\r
\r
/**\r
* @note Disabling this option saves both code and data space.\r
*/\r
#if !defined(DAC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)\r
-#define DAC_USE_MUTUAL_EXCLUSION TRUE\r
+#define DAC_USE_MUTUAL_EXCLUSION FALSE\r
#endif\r
\r
/*===========================================================================*/\r
#define MCUCONF_H\r
\r
#define STM32L4xx_MCUCONF\r
-//#define STM32L476_MCUCONF\r
-#define STM32L432_MCUCONF\r
-//#define STM32L433_MCUCONF\r
+#define STM32L476_MCUCONF\r
+//#define STM32L432_MCUCONF\r
\r
/*\r
* HAL driver system settings.\r
constexpr unsigned int MAX_ELF_FILE_SIZE = 8 * 1024;
constexpr unsigned int MAX_ERROR_QUEUE_SIZE = 8;
-constexpr unsigned int MAX_SAMPLE_BUFFER_SIZE = 8000;
+constexpr unsigned int MAX_SAMPLE_BUFFER_SIZE = 6000;
+constexpr unsigned int MAX_SIGGEN_BUFFER_SIZE = 3000;
enum class RunStatus : char
{
static msg_t conversionMBBuffer[4];
static MAILBOX_DECL(conversionMB, conversionMBBuffer, 4);
-static THD_WORKING_AREA(conversionThreadWA, 1024);
+static THD_WORKING_AREA(conversionThreadWA, 2048);
static THD_FUNCTION(conversionThread, arg);
static time_measurement_t conversion_time_measurement;
#if CACHE_LINE_SIZE > 0
CC_ALIGN(CACHE_LINE_SIZE)
#endif
-static std::array<dacsample_t, CACHE_SIZE_ALIGN(dacsample_t, MAX_SAMPLE_BUFFER_SIZE)> dac2_samples;
+static std::array<dacsample_t, CACHE_SIZE_ALIGN(dacsample_t, MAX_SIGGEN_BUFFER_SIZE)> dac2_samples;
static uint8_t elf_file_store[MAX_ELF_FILE_SIZE];
static elf::entry_t elf_entry = nullptr;
}
static unsigned int dac_sample_count = MAX_SAMPLE_BUFFER_SIZE;
-static unsigned int dac2_sample_count = MAX_SAMPLE_BUFFER_SIZE;
+static unsigned int dac2_sample_count = MAX_SIGGEN_BUFFER_SIZE;
static unsigned int adc_sample_count = MAX_SAMPLE_BUFFER_SIZE;
void main_loop()
case 'D':
if (usbserial::read(&cmd[1], 2) == 2) {
unsigned int count = cmd[1] | (cmd[2] << 8);
- if (count <= MAX_SAMPLE_BUFFER_SIZE / 2) {
+ if (count <= MAX_SIGGEN_BUFFER_SIZE) {
dac2_sample_count = count;
usbserial::read(&dac2_samples[0], dac2_sample_count * sizeof(dacsample_t));
} else {