From d22d4c839e7438786d23921641bdabffac4dd247 Mon Sep 17 00:00:00 2001 From: Giovanni Di Sirio Date: Thu, 26 May 2016 12:42:14 +0000 Subject: API for flash memory mapping, requires implementation. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@9534 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/hal/include/hal_qspi.h | 42 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) (limited to 'os/hal/include/hal_qspi.h') diff --git a/os/hal/include/hal_qspi.h b/os/hal/include/hal_qspi.h index 67fc7ad10..0b67923b3 100644 --- a/os/hal/include/hal_qspi.h +++ b/os/hal/include/hal_qspi.h @@ -114,7 +114,8 @@ typedef enum { QSPI_STOP = 1, /**< Stopped. */ QSPI_READY = 2, /**< Ready. */ QSPI_ACTIVE = 3, /**< Exchanging data. */ - QSPI_COMPLETE = 4 /**< Asynchronous operation complete. */ + QSPI_COMPLETE = 4, /**< Asynchronous operation complete. */ + QSPI_MEMMAP = 5 /**< In memory mapped mode. */ } qspistate_t; /** @@ -128,6 +129,10 @@ typedef struct { #include "hal_qspi_lld.h" +#if !defined(QSPI_SUPPORTS_MEMMAP) +#error "low level does not define QSPI_SUPPORTS_MEMMAP" +#endif + /*===========================================================================*/ /* Driver macros. */ /*===========================================================================*/ @@ -192,6 +197,35 @@ typedef struct { (qspip)->state = QSPI_ACTIVE; \ qspi_lld_receive(qspip, cmdp, n, rxbuf); \ } + +#if (QSPI_SUPPORTS_MEMMAP == TRUE) || defined(__DOXYGEN__) +/** + * @brief Maps in memory space a QSPI flash device. + * @pre The memory flash device must be initialized appropriately + * before mapping it in memory space. + * + * @param[in] qspip pointer to the @p QSPIDriver object + * @param[in] cmdp pointer to the command descriptor + * @param[out] addrp pointer to the memory start address of the mapped + * flash or @p NULL + * + * @iclass + */ +#define qspiMapFlashI(qspip, cmdp, addrp) \ + qspi_lld_map_flash(qspip, cmdp, addrp) + +/** + * @brief Maps in memory space a QSPI flash device. + * @post The memory flash device must be re-initialized for normal + * commands exchange. + * + * @param[in] qspip pointer to the @p QSPIDriver object + * + * @iclass + */ +#define qspiUnmapFlashI(qspip) \ + qspi_lld_unmap_flash(qspip) +#endif /* QSPI_SUPPORTS_MEMMAP == TRUE */ /** @} */ /** @@ -265,6 +299,12 @@ extern "C" { void qspiReceive(QSPIDriver *qspip, const qspi_command_t *cmdp, size_t n, uint8_t *rxbuf); #endif +#if QSPI_SUPPORTS_MEMMAP == TRUE +void qspiMapFlash(QSPIDriver *qspip, + const qspi_command_t *cmdp, + uint8_t **addrp); +void qspiUnmapFlash(QSPIDriver *qspip); +#endif #if QSPI_USE_MUTUAL_EXCLUSION == TRUE void qspiAcquireBus(QSPIDriver *qspip); void qspiReleaseBus(QSPIDriver *qspip); -- cgit v1.2.3