diff options
author | barthess <barthess@yandex.ru> | 2014-11-16 11:44:48 +0300 |
---|---|---|
committer | barthess <barthess@yandex.ru> | 2014-11-16 11:44:48 +0300 |
commit | 70465e063dd7493e6d6351316e4cd27928da5483 (patch) | |
tree | 2e96443c892b6fc56a5c538dce717a44e3112e29 /testhal/STM32/STM32F4xx/FSMC_NAND/dma_storm_spi.c | |
parent | 3c9ff8aace11aa20f3474191a27e3f2485ef35c6 (diff) | |
parent | ed62d9e4d42bde4b929be2523ad94c1a7c8d2827 (diff) | |
download | ChibiOS-Contrib-70465e063dd7493e6d6351316e4cd27928da5483.tar.gz ChibiOS-Contrib-70465e063dd7493e6d6351316e4cd27928da5483.tar.bz2 ChibiOS-Contrib-70465e063dd7493e6d6351316e4cd27928da5483.zip |
Merge branch 'fsmc'
Diffstat (limited to 'testhal/STM32/STM32F4xx/FSMC_NAND/dma_storm_spi.c')
-rw-r--r-- | testhal/STM32/STM32F4xx/FSMC_NAND/dma_storm_spi.c | 110 |
1 files changed, 110 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 0000000..742eeab --- /dev/null +++ b/testhal/STM32/STM32F4xx/FSMC_NAND/dma_storm_spi.c @@ -0,0 +1,110 @@ +/* + ChibiOS/RT - Copyright (C) 2006-2014 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. +*/ +/* + Concepts and parts of this file have been contributed by Uladzimir Pylinsky + aka barthess. + */ + +#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 ints; +static binary_semaphore_t sem; +static bool stop = false; + +/* + ****************************************************************************** + ****************************************************************************** + * LOCAL FUNCTIONS + ****************************************************************************** + ****************************************************************************** + */ + +static void spi_end_cb(SPIDriver *spip){ + ints++; + + 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){ + ints = 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 ints; +} + |