aboutsummaryrefslogtreecommitdiffstats
path: root/testhal/STM32/STM32F4xx/FSMC_NAND/dma_storm_spi.c
diff options
context:
space:
mode:
Diffstat (limited to 'testhal/STM32/STM32F4xx/FSMC_NAND/dma_storm_spi.c')
-rw-r--r--testhal/STM32/STM32F4xx/FSMC_NAND/dma_storm_spi.c90
1 files changed, 90 insertions, 0 deletions
diff --git a/testhal/STM32/STM32F4xx/FSMC_NAND/dma_storm_spi.c b/testhal/STM32/STM32F4xx/FSMC_NAND/dma_storm_spi.c
new file mode 100644
index 000000000..894b273dd
--- /dev/null
+++ b/testhal/STM32/STM32F4xx/FSMC_NAND/dma_storm_spi.c
@@ -0,0 +1,90 @@
+#include "ch.h"
+#include "hal.h"
+
+/*
+ ******************************************************************************
+ * DEFINES
+ ******************************************************************************
+ */
+#define SPI_BUF_SIZE 512
+
+/*
+ ******************************************************************************
+ * EXTERNS
+ ******************************************************************************
+ */
+
+/*
+ ******************************************************************************
+ * PROTOTYPES
+ ******************************************************************************
+ */
+static void spi_end_cb(SPIDriver *spip);
+
+/*
+ ******************************************************************************
+ * GLOBAL VARIABLES
+ ******************************************************************************
+ */
+static uint8_t testbuf_ram[SPI_BUF_SIZE];
+static const uint8_t testbuf_flash[SPI_BUF_SIZE];
+
+/*
+ *
+ */
+static const SPIConfig spicfg = {
+ spi_end_cb,
+ GPIOA,
+ GPIOA_SPI1_NSS,
+ 0, //SPI_CR1_BR_1 | SPI_CR1_BR_0
+};
+
+static uint32_t its;
+static binary_semaphore_t sem;
+static bool stop = false;
+
+/*
+ ******************************************************************************
+ ******************************************************************************
+ * LOCAL FUNCTIONS
+ ******************************************************************************
+ ******************************************************************************
+ */
+
+static void spi_end_cb(SPIDriver *spip){
+ its++;
+
+ if (stop){
+ chSysLockFromISR();
+ chBSemSignalI(&sem);
+ chSysUnlockFromISR();
+ return;
+ }
+ else{
+ chSysLockFromISR();
+ spiStartExchangeI(spip, SPI_BUF_SIZE, testbuf_flash, testbuf_ram);
+ chSysUnlockFromISR();
+ }
+}
+
+/*
+ ******************************************************************************
+ * EXPORTED FUNCTIONS
+ ******************************************************************************
+ */
+
+void dma_storm_spi_start(void){
+ its = 0;
+ stop = false;
+ chBSemObjectInit(&sem, true);
+ spiStart(&SPID1, &spicfg);
+ spiStartExchange(&SPID1, SPI_BUF_SIZE, testbuf_flash, testbuf_ram);
+}
+
+uint32_t dma_storm_spi_stop(void){
+ stop = true;
+ chBSemWait(&sem);
+ spiStop(&SPID1);
+ return its;
+}
+