STM32 TRNG driver, not tested yet.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@12342 110e8d01-0319-4d1e-a829-52ad28d1bb01
This commit is contained in:
parent
644898df5f
commit
e72ef8c943
|
@ -89,7 +89,7 @@ PROJECT = ch
|
|||
MCU = cortex-m4
|
||||
|
||||
# Imported source files and paths.
|
||||
CHIBIOS = ../../..
|
||||
CHIBIOS := ../../..
|
||||
CONFDIR := ./cfg
|
||||
BUILDDIR := ./build
|
||||
DEPDIR := ./.dep
|
||||
|
|
|
@ -89,7 +89,7 @@ PROJECT = ch
|
|||
MCU = cortex-m4
|
||||
|
||||
# Imported source files and paths.
|
||||
CHIBIOS = ../../..
|
||||
CHIBIOS := ../../..
|
||||
CONFDIR := ./cfg
|
||||
BUILDDIR := ./build
|
||||
DEPDIR := ./.dep
|
||||
|
|
|
@ -89,7 +89,7 @@ PROJECT = ch
|
|||
MCU = cortex-m4
|
||||
|
||||
# Imported source files and paths.
|
||||
CHIBIOS = ../../..
|
||||
CHIBIOS := ../../..
|
||||
CONFDIR := ./cfg
|
||||
BUILDDIR := ./build
|
||||
DEPDIR := ./.dep
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
ifeq ($(USE_SMART_BUILD),yes)
|
||||
ifneq ($(findstring HAL_USE_TRNG TRUE,$(HALCONF)),)
|
||||
PLATFORMSRC += $(CHIBIOS)/os/hal/ports/STM32/LLD/RNGv1/hal_trng_lld.c
|
||||
endif
|
||||
else
|
||||
PLATFORMSRC += $(CHIBIOS)/os/hal/ports/STM32/LLD/RNGv1/hal_trng_lld.c
|
||||
endif
|
||||
|
||||
PLATFORMINC += $(CHIBIOS)/os/hal/ports/STM32/LLD/RNGv1
|
|
@ -0,0 +1,179 @@
|
|||
/*
|
||||
ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio
|
||||
|
||||
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.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file hal_trng_lld.c
|
||||
* @brief STM32 TRNG subsystem low level driver source.
|
||||
*
|
||||
* @addtogroup TRNG
|
||||
* @{
|
||||
*/
|
||||
|
||||
#include "hal.h"
|
||||
|
||||
#if (HAL_USE_TRNG == TRUE) || defined(__DOXYGEN__)
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver local definitions. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver exported variables. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief TRNGD1 driver identifier.
|
||||
*/
|
||||
#if (STM32_TRNG_USE_RNG1 == TRUE) || defined(__DOXYGEN__)
|
||||
TRNGDriver TRNGD1;
|
||||
#endif
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver local variables and types. */
|
||||
/*===========================================================================*/
|
||||
|
||||
static const TRNGConfig default_cfg = {0};
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver local functions. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver interrupt handlers. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver exported functions. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Low level TRNG driver initialization.
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
void trng_lld_init(void) {
|
||||
|
||||
#if STM32_TRNG_USE_RNG1 == TRUE
|
||||
/* Driver initialization.*/
|
||||
trngObjectInit(&TRNGD1);
|
||||
TRNGD1.rng = RNG;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Configures and activates the TRNG peripheral.
|
||||
*
|
||||
* @param[in] trngp pointer to the @p TRNGDriver object
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
void trng_lld_start(TRNGDriver *trngp) {
|
||||
|
||||
/* There is no real configuration but setting up a valid pointer anyway.*/
|
||||
if (trngp->config == NULL) {
|
||||
trngp->config = &default_cfg;
|
||||
}
|
||||
|
||||
if (trngp->state == TRNG_STOP) {
|
||||
/* Enables the peripheral.*/
|
||||
#if STM32_TRNG_USE_RNG1 == TRUE
|
||||
if (&TRNGD1 == trngp) {
|
||||
rccEnableRNG(false);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
/* Configures the peripheral.*/
|
||||
trngp->rng->CR |= RNG_CR_RNGEN;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Deactivates the TRNG peripheral.
|
||||
*
|
||||
* @param[in] trngp pointer to the @p TRNGDriver object
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
void trng_lld_stop(TRNGDriver *trngp) {
|
||||
|
||||
if (trngp->state == TRNG_READY) {
|
||||
/* Resets the peripheral.*/
|
||||
trngp->rng->CR &= ~RNG_CR_RNGEN;
|
||||
|
||||
/* Disables the peripheral.*/
|
||||
#if STM32_TRNG_USE_RNG1 == TRUE
|
||||
if (&TRNGD1 == trngp) {
|
||||
rccDisableRNG();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief True random numbers generator.
|
||||
* @note The function is blocking and likely performs polled waiting
|
||||
* inside the low level implementation.
|
||||
*
|
||||
* @param[in] trngp pointer to the @p TRNGDriver object
|
||||
* @param[in] size size of output buffer
|
||||
* @param[out] out output buffer
|
||||
* @return The operation status.
|
||||
* @retval false if a random number has been generated.
|
||||
* @retval true if an HW error occurred.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
bool trng_lld_generate(TRNGDriver *trngp, size_t size, uint8_t *out) {
|
||||
|
||||
while (true) {
|
||||
uint32_t r, tmo;
|
||||
size_t i;
|
||||
|
||||
/* Waiting for error conditions to be cleared.*/
|
||||
tmo = STM32_TRNG_ERROR_CLEAR_ATTEMPTS;
|
||||
while ((tmo > 0) && ((trngp->rng->SR & (RNG_SR_CECS | RNG_SR_SECS)) != 0)) {
|
||||
tmo--;
|
||||
if (tmo == 0) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
/* Waiting for a random number in data register.*/
|
||||
tmo = STM32_DATA_FETCH_ATTEMPTS;
|
||||
while ((tmo > 0) && ((trngp->rng->SR & RNG_SR_DRDY) != 0)) {
|
||||
tmo--;
|
||||
if (tmo == 0) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
/* Getting the generated random number.*/
|
||||
r = trngp->rng->DR;
|
||||
|
||||
/* Writing in the output buffer.*/
|
||||
for (i = 0; i < sizeof (uint32_t) / sizeof (uint8_t); i++) {
|
||||
*out++ = (uint8_t)r;
|
||||
r = r >> 8;
|
||||
size--;
|
||||
if (size == 0) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* HAL_USE_TRNG == TRUE */
|
||||
|
||||
/** @} */
|
|
@ -0,0 +1,157 @@
|
|||
/*
|
||||
ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio
|
||||
|
||||
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.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file hal_trng_lld.h
|
||||
* @brief STM32 TRNG subsystem low level driver header.
|
||||
*
|
||||
* @addtogroup TRNG
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef HAL_TRNG_LLD_H
|
||||
#define HAL_TRNG_LLD_H
|
||||
|
||||
#if (HAL_USE_TRNG == TRUE) || defined(__DOXYGEN__)
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver constants. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver pre-compile time settings. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @name STM32 configuration options
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @brief TRNGD1 driver enable switch.
|
||||
* @details If set to @p TRUE the support for TRNGD1 is included.
|
||||
* @note The default is @p FALSE.
|
||||
*/
|
||||
#if !defined(STM32_TRNG_USE_RNG1) || defined(__DOXYGEN__)
|
||||
#define STM32_TRNG_USE_RNG1 FALSE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief TRNGD1 error clear timeout counter.
|
||||
* @details Number of status register fetches before failing.
|
||||
*/
|
||||
#if !defined(STM32_TRNG_ERROR_CLEAR_ATTEMPTS) || defined(__DOXYGEN__)
|
||||
#define STM32_TRNG_ERROR_CLEAR_ATTEMPTS 1000
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief TRNGD1 data available timeout counter.
|
||||
* @details Number of status register fetches before failing.
|
||||
*/
|
||||
#if !defined(STM32_DATA_FETCH_ATTEMPTS) || defined(__DOXYGEN__)
|
||||
#define STM32_DATA_FETCH_ATTEMPTS 1000
|
||||
#endif
|
||||
/** @} */
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Derived constants and error checks. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#if !defined(STM32_HAS_RNG1)
|
||||
#define STM32_HAS_RNG1 FALSE
|
||||
#endif
|
||||
|
||||
#if STM32_TRNG_USE_RNG1 && !STM32_HAS_RNG1
|
||||
#error "RNG1 not present in the selected device"
|
||||
#endif
|
||||
|
||||
#if !STM32_TRNG_USE_RNG1
|
||||
#error "TRNG driver activated but no RNG peripheral assigned"
|
||||
#endif
|
||||
|
||||
#if !defined(STM32_RNGCLK)
|
||||
#error "STM32_RNGCLK not defined in this HAL"
|
||||
#endif
|
||||
|
||||
#if STM32_RNGCLK != 48000000
|
||||
#error "STM32_RNGCLK is not exactly 48000000"
|
||||
#endif
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver data structures and types. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Driver configuration structure.
|
||||
* @note It could be empty on some architectures.
|
||||
*/
|
||||
typedef struct {
|
||||
/* End of the mandatory fields.*/
|
||||
/**
|
||||
* @brief Dummy configuration, it is not needed.
|
||||
*/
|
||||
uint32_t dummy;
|
||||
} TRNGConfig;
|
||||
|
||||
/**
|
||||
* @brief Structure representing a TRNG driver.
|
||||
*/
|
||||
struct TRNGDriver {
|
||||
/**
|
||||
* @brief Driver state.
|
||||
*/
|
||||
trngstate_t state;
|
||||
/**
|
||||
* @brief Current configuration data.
|
||||
*/
|
||||
const TRNGConfig *config;
|
||||
#if defined(TRNG_DRIVER_EXT_FIELDS)
|
||||
TRNG_DRIVER_EXT_FIELDS
|
||||
#endif
|
||||
/* End of the mandatory fields.*/
|
||||
/**
|
||||
* @brief Pointer to the RNG registers block.
|
||||
*/
|
||||
RNG_TypeDef *rng;
|
||||
};
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver macros. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* External declarations. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#if (STM32_TRNG_USE_RNG1 == TRUE) && !defined(__DOXYGEN__)
|
||||
extern TRNGDriver TRNGD1;
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
void trng_lld_init(void);
|
||||
void trng_lld_start(TRNGDriver *trngp);
|
||||
void trng_lld_stop(TRNGDriver *trngp);
|
||||
bool trng_lld_generate(TRNGDriver *trngp, size_t size, uint8_t *out);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* HAL_USE_TRNG == TRUE */
|
||||
|
||||
#endif /* HAL_TRNG_LLD_H */
|
||||
|
||||
/** @} */
|
|
@ -0,0 +1,10 @@
|
|||
STM32 RNGv1 driver.
|
||||
|
||||
Driver capability:
|
||||
|
||||
- Supports the STM32 TRNGv1 found on STM32L4 and STM32L4+ families.
|
||||
|
||||
The file registry must export:
|
||||
|
||||
STM32_HAS_RNG1 - RNG presence flag.
|
||||
|
|
@ -2095,6 +2095,11 @@
|
|||
*/
|
||||
#define STM32_USBCLK STM32_48CLK
|
||||
|
||||
/**
|
||||
* @brief RNG clock point.
|
||||
*/
|
||||
#define STM32_RNGCLK STM32_48CLK
|
||||
|
||||
/**
|
||||
* @brief ADC clock frequency.
|
||||
*/
|
||||
|
|
|
@ -29,6 +29,7 @@ include $(CHIBIOS)/os/hal/ports/STM32/LLD/GPIOv3/driver.mk
|
|||
include $(CHIBIOS)/os/hal/ports/STM32/LLD/I2Cv2/driver.mk
|
||||
include $(CHIBIOS)/os/hal/ports/STM32/LLD/OTGv1/driver.mk
|
||||
include $(CHIBIOS)/os/hal/ports/STM32/LLD/QUADSPIv1/driver.mk
|
||||
include $(CHIBIOS)/os/hal/ports/STM32/LLD/RNGv1/driver.mk
|
||||
include $(CHIBIOS)/os/hal/ports/STM32/LLD/RTCv2/driver.mk
|
||||
include $(CHIBIOS)/os/hal/ports/STM32/LLD/SDMMCv1/driver.mk
|
||||
include $(CHIBIOS)/os/hal/ports/STM32/LLD/SPIv2/driver.mk
|
||||
|
|
|
@ -625,6 +625,34 @@
|
|||
#define rccResetQUADSPI1() rccResetAHB3(RCC_AHB3RSTR_QSPIRST)
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name RNG peripherals specific RCC operations
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @brief Enables the RNG peripheral clock.
|
||||
*
|
||||
* @param[in] lp low power enable flag
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
#define rccEnableRNG(lp) rccEnableAHB2(RCC_AHB2ENR_RNGEN, lp)
|
||||
|
||||
/**
|
||||
* @brief Disables the RNG peripheral clock.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
#define rccDisableRNG() rccDisableAHB2(RCC_AHB2ENR_RNGEN)
|
||||
|
||||
/**
|
||||
* @brief Resets the RNG peripheral.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
#define rccResetRNG() rccResetAHB3(RCC_AHB2RSTR_RNGRST)
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name SDMMC peripheral specific RCC operations
|
||||
* @{
|
||||
|
|
|
@ -204,6 +204,9 @@
|
|||
STM32_DMA_STREAM_ID_MSK(2, 7))
|
||||
#define STM32_QUADSPI1_DMA_CHN 0x03050000
|
||||
|
||||
/* RNG attributes.*/
|
||||
#define STM32_HAS_RNG1 TRUE
|
||||
|
||||
/* RTC attributes.*/
|
||||
#define STM32_HAS_RTC TRUE
|
||||
#define STM32_RTC_HAS_SUBSECONDS TRUE
|
||||
|
@ -551,6 +554,9 @@
|
|||
STM32_DMA_STREAM_ID_MSK(2, 7))
|
||||
#define STM32_QUADSPI1_DMA_CHN 0x03050000
|
||||
|
||||
/* RNG attributes.*/
|
||||
#define STM32_HAS_RNG1 TRUE
|
||||
|
||||
/* RTC attributes.*/
|
||||
#define STM32_HAS_RTC TRUE
|
||||
#define STM32_RTC_HAS_SUBSECONDS TRUE
|
||||
|
@ -913,6 +919,9 @@
|
|||
STM32_DMA_STREAM_ID_MSK(2, 7))
|
||||
#define STM32_QUADSPI1_DMA_CHN 0x03050000
|
||||
|
||||
/* RNG attributes.*/
|
||||
#define STM32_HAS_RNG1 TRUE
|
||||
|
||||
/* RTC attributes.*/
|
||||
#define STM32_HAS_RTC TRUE
|
||||
#define STM32_RTC_HAS_SUBSECONDS TRUE
|
||||
|
@ -1338,6 +1347,9 @@
|
|||
STM32_DMA_STREAM_ID_MSK(2, 7))
|
||||
#define STM32_QUADSPI1_DMA_CHN 0x03050000
|
||||
|
||||
/* RNG attributes.*/
|
||||
#define STM32_HAS_RNG1 TRUE
|
||||
|
||||
/* RTC attributes.*/
|
||||
#define STM32_HAS_RTC TRUE
|
||||
#define STM32_RTC_HAS_SUBSECONDS TRUE
|
||||
|
|
|
@ -57,16 +57,6 @@
|
|||
/* Driver data structures and types. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief TRNG frequency type.
|
||||
*/
|
||||
typedef uint32_t trngfreq_t;
|
||||
|
||||
/**
|
||||
* @brief TRNG counter type.
|
||||
*/
|
||||
typedef uint16_t trngcnt_t;
|
||||
|
||||
/**
|
||||
* @brief Driver configuration structure.
|
||||
* @note It could be empty on some architectures.
|
||||
|
|
|
@ -78,13 +78,14 @@
|
|||
<configuration configurationName="Default">
|
||||
<resource resourceType="PROJECT" workspacePath="/STM32-TRNG"/>
|
||||
</configuration>
|
||||
<configuration configurationName="Build for STM32L476-Discovery"/>
|
||||
</storageModule>
|
||||
<storageModule moduleId="scannerConfiguration">
|
||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
|
||||
<scannerConfigBuildInfo instanceId="0.365230168.523175374">
|
||||
<scannerConfigBuildInfo instanceId="0.365230168">
|
||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
|
||||
</scannerConfigBuildInfo>
|
||||
<scannerConfigBuildInfo instanceId="0.365230168">
|
||||
<scannerConfigBuildInfo instanceId="0.365230168.523175374">
|
||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
|
||||
</scannerConfigBuildInfo>
|
||||
</storageModule>
|
||||
|
|
|
@ -170,7 +170,7 @@
|
|||
* @brief Enables the TRNG subsystem.
|
||||
*/
|
||||
#if !defined(HAL_USE_TRNG) || defined(__DOXYGEN__)
|
||||
#define HAL_USE_TRNG FALSE
|
||||
#define HAL_USE_TRNG TRUE
|
||||
#endif
|
||||
|
||||
/**
|
||||
|
@ -198,7 +198,7 @@
|
|||
* @brief Enables the WSPI subsystem.
|
||||
*/
|
||||
#if !defined(HAL_USE_WSPI) || defined(__DOXYGEN__)
|
||||
#define HAL_USE_WSPI TRUE
|
||||
#define HAL_USE_WSPI FALSE
|
||||
#endif
|
||||
|
||||
/*===========================================================================*/
|
||||
|
|
|
@ -277,6 +277,11 @@
|
|||
#define STM32_ST_IRQ_PRIORITY 8
|
||||
#define STM32_ST_USE_TIMER 2
|
||||
|
||||
/*
|
||||
* TRNG driver system settings.
|
||||
*/
|
||||
#define STM32_TRNG_USE_RNG1 TRUE
|
||||
|
||||
/*
|
||||
* UART driver system settings.
|
||||
*/
|
||||
|
@ -322,7 +327,7 @@
|
|||
/*
|
||||
* WSPI driver system settings.
|
||||
*/
|
||||
#define STM32_WSPI_USE_QUADSPI1 TRUE
|
||||
#define STM32_WSPI_USE_QUADSPI1 FALSE
|
||||
#define STM32_WSPI_QUADSPI1_DMA_STREAM STM32_DMA_STREAM_ID(2, 7)
|
||||
|
||||
#endif /* MCUCONF_H */
|
||||
|
|
|
@ -14,41 +14,11 @@
|
|||
limitations under the License.
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
|
||||
#include "serial_nor.h"
|
||||
#include "mfs.h"
|
||||
|
||||
#include "mfs_test_root.h"
|
||||
|
||||
#include "portab.h"
|
||||
|
||||
/* 16MB device, 2 cycles delay after NCS.*/
|
||||
const WSPIConfig WSPIcfg1 = {
|
||||
.end_cb = NULL,
|
||||
.dcr = STM32_DCR_FSIZE(24) | STM32_DCR_CSHT(1)
|
||||
};
|
||||
|
||||
const SNORConfig snorcfg1 = {
|
||||
.busp = &WSPID1,
|
||||
.buscfg = &WSPIcfg1
|
||||
};
|
||||
|
||||
SNORDriver snor1;
|
||||
|
||||
const MFSConfig mfscfg1 = {
|
||||
.flashp = (BaseFlash *)&snor1,
|
||||
.erased = 0xFFFFFFFFU,
|
||||
.bank_size = 4096U,
|
||||
.bank0_start = 0U,
|
||||
.bank0_sectors = 1U,
|
||||
.bank1_start = 1U,
|
||||
.bank1_sectors = 1U
|
||||
};
|
||||
|
||||
/*
|
||||
* LED blinker thread, times are in milliseconds.
|
||||
*/
|
||||
|
@ -86,18 +56,11 @@ int main(void) {
|
|||
/* Starting a serial port for test report output.*/
|
||||
sdStart(&PORTAB_SD1, NULL);
|
||||
|
||||
/* Initializing and starting snor1 driver.*/
|
||||
snorObjectInit(&snor1);
|
||||
snorStart(&snor1, &snorcfg1);
|
||||
|
||||
/* Creates the blinker thread.*/
|
||||
chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL);
|
||||
|
||||
/* Normal main() thread activity, in this demo it does nothing.*/
|
||||
while (true) {
|
||||
if (palReadLine(PORTAB_LINE_BUTTON) == PORTAB_BUTTON_PRESSED) {
|
||||
test_execute((BaseSequentialStream *)&PORTAB_SD1, &mfs_test_suite);
|
||||
}
|
||||
chThdSleepMilliseconds(500);
|
||||
}
|
||||
return 0;
|
||||
|
|
|
@ -18,7 +18,7 @@ ifeq ($(USE_CPPOPT),)
|
|||
USE_CPPOPT = -fno-rtti
|
||||
endif
|
||||
|
||||
# Enable this if you want the linker to remove unused code and data
|
||||
# Enable this if you want the linker to remove unused code and data.
|
||||
ifeq ($(USE_LINK_GC),)
|
||||
USE_LINK_GC = yes
|
||||
endif
|
||||
|
@ -28,16 +28,11 @@ ifeq ($(USE_LDOPT),)
|
|||
USE_LDOPT =
|
||||
endif
|
||||
|
||||
# Enable this if you want link time optimizations (LTO)
|
||||
# Enable this if you want link time optimizations (LTO).
|
||||
ifeq ($(USE_LTO),)
|
||||
USE_LTO = yes
|
||||
endif
|
||||
|
||||
# If enabled, this option allows to compile the application in THUMB mode.
|
||||
ifeq ($(USE_THUMB),)
|
||||
USE_THUMB = yes
|
||||
endif
|
||||
|
||||
# Enable this if you want to see the full log while compiling.
|
||||
ifeq ($(USE_VERBOSE_COMPILE),)
|
||||
USE_VERBOSE_COMPILE = no
|
||||
|
@ -76,7 +71,7 @@ endif
|
|||
|
||||
# FPU-related options.
|
||||
ifeq ($(USE_FPU_OPT),)
|
||||
USE_FPU_OPT = -mfloat-abi=$(USE_FPU) -mfpu=fpv4-sp-d16 -fsingle-precision-constant
|
||||
USE_FPU_OPT = -mfloat-abi=$(USE_FPU) -mfpu=fpv4-sp-d16
|
||||
endif
|
||||
|
||||
#
|
||||
|
@ -84,13 +79,16 @@ endif
|
|||
##############################################################################
|
||||
|
||||
##############################################################################
|
||||
# Project, sources and paths
|
||||
# Project, target, sources and paths
|
||||
#
|
||||
|
||||
# Define project name here
|
||||
PROJECT = ch
|
||||
|
||||
# Imported source files and paths
|
||||
# Target settings.
|
||||
MCU = cortex-m4
|
||||
|
||||
# Imported source files and paths.
|
||||
CHIBIOS := ../../../..
|
||||
CONFDIR := ./cfg/stm32l476_discovery
|
||||
BUILDDIR := ./build/stm32l476_discovery
|
||||
|
@ -112,12 +110,10 @@ include $(CHIBIOS)/os/common/ports/ARMCMx/compilers/GCC/mk/port_v7m.mk
|
|||
include $(CHIBIOS)/tools/mk/autobuild.mk
|
||||
# Other files (optional).
|
||||
include $(CHIBIOS)/test/lib/test.mk
|
||||
include $(CHIBIOS)/test/mfs/mfs_test.mk
|
||||
include $(CHIBIOS)/os/hal/lib/complex/serial_nor/devices/micron_n25q/flash_device.mk
|
||||
include $(CHIBIOS)/os/hal/lib/complex/mfs/mfs.mk
|
||||
include $(CHIBIOS)/os/hal/lib/streams/streams.mk
|
||||
include $(CHIBIOS)/test/rt/rt_test.mk
|
||||
include $(CHIBIOS)/test/oslib/oslib_test.mk
|
||||
|
||||
# Define linker script file here
|
||||
# Define linker script file here.
|
||||
LDSCRIPT= $(STARTUPLD)/STM32L476xG.ld
|
||||
|
||||
# C sources that can be compiled in ARM or THUMB mode depending on the global
|
||||
|
@ -131,34 +127,23 @@ CSRC = $(ALLCSRC) \
|
|||
# setting.
|
||||
CPPSRC = $(ALLCPPSRC)
|
||||
|
||||
# C sources to be compiled in ARM mode regardless of the global setting.
|
||||
# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
|
||||
# option that results in lower performance and larger code size.
|
||||
ACSRC =
|
||||
|
||||
# C++ sources to be compiled in ARM mode regardless of the global setting.
|
||||
# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
|
||||
# option that results in lower performance and larger code size.
|
||||
ACPPSRC =
|
||||
|
||||
# C sources to be compiled in THUMB mode regardless of the global setting.
|
||||
# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
|
||||
# option that results in lower performance and larger code size.
|
||||
TCSRC =
|
||||
|
||||
# C sources to be compiled in THUMB mode regardless of the global setting.
|
||||
# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
|
||||
# option that results in lower performance and larger code size.
|
||||
TCPPSRC =
|
||||
|
||||
# List ASM source files here
|
||||
# List ASM source files here.
|
||||
ASMSRC = $(ALLASMSRC)
|
||||
|
||||
# List ASM with preprocessor source files here.
|
||||
ASMXSRC = $(ALLXASMSRC)
|
||||
|
||||
INCDIR = $(ALLINC) $(TESTINC) $(CONFDIR)
|
||||
# Inclusion directories.
|
||||
INCDIR = $(CONFDIR) $(ALLINC) $(TESTINC)
|
||||
|
||||
# Define C warning options here.
|
||||
CWARN = -Wall -Wextra -Wundef -Wstrict-prototypes
|
||||
|
||||
# Define C++ warning options here.
|
||||
CPPWARN = -Wall -Wextra -Wundef
|
||||
|
||||
#
|
||||
# Project, sources and paths
|
||||
# Project, target, sources and paths
|
||||
##############################################################################
|
||||
|
||||
##############################################################################
|
||||
|
@ -185,43 +170,21 @@ ULIBS =
|
|||
##############################################################################
|
||||
|
||||
##############################################################################
|
||||
# Compiler settings
|
||||
# Common rules
|
||||
#
|
||||
|
||||
MCU = cortex-m4
|
||||
|
||||
#TRGT = arm-elf-
|
||||
TRGT = arm-none-eabi-
|
||||
CC = $(TRGT)gcc
|
||||
CPPC = $(TRGT)g++
|
||||
# Enable loading with g++ only if you need C++ runtime support.
|
||||
# NOTE: You can use C++ even without C++ support if you are careful. C++
|
||||
# runtime support makes code size explode.
|
||||
LD = $(TRGT)gcc
|
||||
#LD = $(TRGT)g++
|
||||
CP = $(TRGT)objcopy
|
||||
AS = $(TRGT)gcc -x assembler-with-cpp
|
||||
AR = $(TRGT)ar
|
||||
OD = $(TRGT)objdump
|
||||
SZ = $(TRGT)size
|
||||
HEX = $(CP) -O ihex
|
||||
BIN = $(CP) -O binary
|
||||
|
||||
# ARM-specific options here
|
||||
AOPT =
|
||||
|
||||
# THUMB-specific options here
|
||||
TOPT = -mthumb -DTHUMB
|
||||
|
||||
# Define C warning options here
|
||||
CWARN = -Wall -Wextra -Wundef -Wstrict-prototypes
|
||||
|
||||
# Define C++ warning options here
|
||||
CPPWARN = -Wall -Wextra -Wundef
|
||||
|
||||
#
|
||||
# Compiler settings
|
||||
##############################################################################
|
||||
|
||||
RULESPATH = $(CHIBIOS)/os/common/startup/ARMCMx/compilers/GCC/mk
|
||||
include $(RULESPATH)/arm-none-eabi.mk
|
||||
include $(RULESPATH)/rules.mk
|
||||
|
||||
#
|
||||
# Common rules
|
||||
##############################################################################
|
||||
|
||||
##############################################################################
|
||||
# Custom rules
|
||||
#
|
||||
|
||||
#
|
||||
# Custom rules
|
||||
##############################################################################
|
||||
|
|
Loading…
Reference in New Issue