123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351 |
- /*!
- * @file apm32f10x_qspi.h
- *
- * @brief This file contains all the prototypes,enumeration and macros for the QSPI peripheral
- *
- * @version V1.0.4
- *
- * @date 2022-12-01
- *
- * @attention
- *
- * Copyright (C) 2020-2022 Geehy Semiconductor
- *
- * You may not use this file except in compliance with the
- * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE).
- *
- * The program is only for reference, which is distributed in the hope
- * that it will be useful and instructional for customers to develop
- * their software. Unless required by applicable law or agreed to in
- * writing, the program is distributed on an "AS IS" BASIS, WITHOUT
- * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied.
- * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions
- * and limitations under the License.
- */
- /* Define to prevent recursive inclusion */
- #ifndef __APM32F10X_QSPI_H
- #define __APM32F10X_QSPI_H
- /* Includes */
- #include "apm32f10x.h"
- #ifdef __cplusplus
- extern "C" {
- #endif
- /** @addtogroup APM32F10x_StdPeriphDriver
- @{
- */
- /** @addtogroup QSPI_Driver QSPI Driver
- @{
- */
- /** @defgroup QSPI_Macros Macros
- @{
- */
- /* CTRL1 register reset value */
- #define QSPI_CTRL1_RESET_VALUE ((uint32_t)0x4007)
- /* CTRL2 register reset value */
- #define QSPI_CTRL2_RESET_VALUE ((uint32_t)0x00)
- /* SSIEN register reset value */
- #define QSPI_SSIEN_RESET_VALUE ((uint32_t)0x00)
- /* SLAEN register reset value */
- #define QSPI_SLAEN_RESET_VALUE ((uint32_t)0x00)
- /* BR register reset value */
- #define QSPI_BR_RESET_VALUE ((uint32_t)0x00)
- /* TFTL register reset value */
- #define QSPI_TFTL_RESET_VALUE ((uint32_t)0x00)
- /* RFTL register reset value */
- #define QSPI_RFTL_RESET_VALUE ((uint32_t)0x00)
- /* TFL register reset value */
- #define QSPI_TFL_RESET_VALUE ((uint32_t)0x00)
- /* RFL register reset value */
- #define QSPI_RFL_RESET_VALUE ((uint32_t)0x00)
- /* STS register reset value */
- #define QSPI_STS_RESET_VALUE ((uint32_t)0x06)
- /* INTEN register reset value */
- #define QSPI_INTEN_RESET_VALUE ((uint32_t)0x7F)
- /* RSD register reset value */
- #define QSPI_RSD_RESET_VALUE ((uint32_t)0x00)
- /* CTRL3 register reset value */
- #define QSPI_CTRL3_RESET_VALUE ((uint32_t)0x200)
- /* IOSW register reset value */
- #define QSPI_IOSW_RESET_VALUE ((uint32_t)0x00)
- /**@} end of group QSPI_Macros*/
- /** @defgroup QSPI_Enumerations Enumerations
- @{
- */
- /**
- * @brief Frame format
- */
- typedef enum
- {
- QSPI_FRF_STANDARD, /*!< Standard mode */
- QSPI_FRF_DUAL, /*!< Dual SPI */
- QSPI_FRF_QUAD /*!< QUAD SPI */
- } QSPI_FRF_T;
- /**
- * @brief Transmission mode
- */
- typedef enum
- {
- QSPI_TRANS_MODE_TX_RX, /*!< TX and RX mode */
- QSPI_TRANS_MODE_TX, /*!< TX mode only */
- QSPI_TRANS_MODE_RX, /*!< RX mode only */
- QSPI_TRANS_MODE_EEPROM_READ /*!< EEPROM read mode */
- } QSPI_TRANS_MODE_T;
- /**
- * @brief Clock polarity
- */
- typedef enum
- {
- QSPI_CLKPOL_LOW,
- QSPI_CLKPOL_HIGH
- } QSPI_CLKPOL_T;
- /**
- * @brief Clock phase
- */
- typedef enum
- {
- QSPI_CLKPHA_1EDGE,
- QSPI_CLKPHA_2EDGE
- } QSPI_CLKPHA_T;
- /**
- * @brief Data format size
- */
- typedef enum
- {
- QSPI_DFS_4BIT = 3,
- QSPI_DFS_5BIT,
- QSPI_DFS_6BIT,
- QSPI_DFS_7BIT,
- QSPI_DFS_8BIT,
- QSPI_DFS_9BIT,
- QSPI_DFS_10BIT,
- QSPI_DFS_11BIT,
- QSPI_DFS_12BIT,
- QSPI_DFS_13BIT,
- QSPI_DFS_14BIT,
- QSPI_DFS_15BIT,
- QSPI_DFS_16BIT,
- QSPI_DFS_17BIT,
- QSPI_DFS_18BIT,
- QSPI_DFS_19BIT,
- QSPI_DFS_20BIT,
- QSPI_DFS_21BIT,
- QSPI_DFS_22BIT,
- QSPI_DFS_23BIT,
- QSPI_DFS_24BIT,
- QSPI_DFS_25BIT,
- QSPI_DFS_26BIT,
- QSPI_DFS_27BIT,
- QSPI_DFS_28BIT,
- QSPI_DFS_29BIT,
- QSPI_DFS_30BIT,
- QSPI_DFS_31BIT,
- QSPI_DFS_32BIT
- } QSPI_DFS_T;
- /**
- * @brief QSPI flag
- */
- typedef enum
- {
- QSPI_FLAG_BUSY = BIT0, /*!< Busy flag */
- QSPI_FLAG_TFNF = BIT1, /*!< TX FIFO not full flag */
- QSPI_FLAG_TFE = BIT2, /*!< TX FIFO empty flag */
- QSPI_FLAG_RFNE = BIT3, /*!< RX FIFO not empty flag */
- QSPI_FLAG_RFF = BIT4, /*!< RX FIFO full flag */
- QSPI_FLAG_DCE = BIT6 /*!< Data collision error */
- } QSPI_FLAG_T;
- /**
- * @brief QSPI interrupt source
- */
- typedef enum
- {
- QSPI_INT_TFE = BIT0, /*!< TX FIFO empty interrupt */
- QSPI_INT_TFO = BIT1, /*!< TX FIFO overflow interrupt */
- QSPI_INT_RFU = BIT2, /*!< RX FIFO underflow interrupt */
- QSPI_INT_RFO = BIT3, /*!< RX FIFO overflow interrupt */
- QSPI_INT_RFF = BIT4, /*!< RX FIFO full interrupt */
- QSPI_INT_MST = BIT5 /*!< Master interrupt */
- } QSPI_INT_T;
- /**
- * @brief QSPI interrupt flag
- */
- typedef enum
- {
- QSPI_INT_FLAG_TFE = BIT0, /*!< TX FIFO empty interrupt flag */
- QSPI_INT_FLAG_TFO = BIT1, /*!< TX FIFO overflow interrupt flag */
- QSPI_INT_FLAG_RFU = BIT2, /*!< RX FIFO underflow interrupt flag */
- QSPI_INT_FLAG_RFO = BIT3, /*!< RX FIFO overflow interrupt flag */
- QSPI_INT_FLAG_RFF = BIT4, /*!< RX FIFO full interrupt flag */
- QSPI_INT_FLAG_MST = BIT5 /*!< Master interrupt flag */
- } QSPI_INT_FLAG_T;
- /**
- * @brief Reception sample edge
- */
- typedef enum
- {
- QSPI_RSE_RISING,
- QSPI_RSE_FALLING
- } QSPI_RSE_T;
- /**
- * @brief Instruction length
- */
- typedef enum
- {
- QSPI_INST_LEN_0,
- QSPI_INST_LEN_4BIT,
- QSPI_INST_LEN_8BIT,
- QSPI_INST_LEN_16BIT
- } QSPI_INST_LEN_T;
- /**
- * @brief QSPI address length
- */
- typedef enum
- {
- QSPI_ADDR_LEN_0,
- QSPI_ADDR_LEN_4BIT,
- QSPI_ADDR_LEN_8BIT,
- QSPI_ADDR_LEN_12BIT,
- QSPI_ADDR_LEN_16BIT,
- QSPI_ADDR_LEN_20BIT,
- QSPI_ADDR_LEN_24BIT,
- QSPI_ADDR_LEN_28BIT,
- QSPI_ADDR_LEN_32BIT,
- QSPI_ADDR_LEN_36BIT,
- QSPI_ADDR_LEN_40BIT,
- QSPI_ADDR_LEN_44BIT,
- QSPI_ADDR_LEN_48BIT,
- QSPI_ADDR_LEN_52BIT,
- QSPI_ADDR_LEN_56BIT,
- QSPI_ADDR_LEN_60BIT
- } QSPI_ADDR_LEN_T;
- /**
- * @brief Instruction and address transmission mode
- */
- typedef enum
- {
- QSPI_INST_ADDR_TYPE_STANDARD,
- QSPI_INST_TYPE_STANDARD,
- QSPI_INST_ADDR_TYPE_FRF
- } QSPI_INST_ADDR_TYPE_T;
- /**
- * @brief Slave Select Toggle
- */
- typedef enum
- {
- QSPI_SST_DISABLE,
- QSPI_SST_ENABLE
- } QSPI_SST_T;
- /**@} end of group QSPI_Enumerations*/
- /** @defgroup QSPI_Structure Data Structure
- @{
- */
- typedef struct
- {
- QSPI_SST_T selectSlaveToggle; /*!< Slave Select Toggle */
- QSPI_FRF_T frameFormat; /*!< Frame format */
- uint16_t clockDiv; /*!< Clock divider */
- QSPI_CLKPOL_T clockPolarity; /*!< Clock polarity */
- QSPI_CLKPHA_T clockPhase; /*!< Clock phase */
- QSPI_DFS_T dataFrameSize; /*!< Data frame size */
- } QSPI_Config_T;
- /**@} end of group QSPI_Structure*/
- /** @defgroup QSPI_Functions Functions
- @{
- */
- /* Reset */
- void QSPI_Reset(void);
- /* Configuration */
- void QSPI_Config(QSPI_Config_T* qspiConfig);
- void QSPI_ConfigStructInit(QSPI_Config_T* qspiConfig);
- /* Data frame size, frame number, frame format */
- void QSPI_ConfigFrameNum(uint16_t num);
- void QSPI_ConfigDataFrameSize(QSPI_DFS_T dfs);
- void QSPI_ConfigFrameFormat(QSPI_FRF_T frameFormat);
- /* Disable or Enable */
- void QSPI_Enable(void);
- void QSPI_Disable(void);
- /* TX and RX FIFO */
- uint8_t QSPI_ReadTxFifoDataNum(void);
- uint8_t QSPI_ReadRxFifoDataNum(void);
- void QSPI_ConfigRxFifoThreshold(uint8_t threshold);
- void QSPI_ConfigTxFifoThreshold(uint8_t threshold);
- void QSPI_ConfigTxFifoEmptyThreshold(uint8_t threshold);
- /* RX Sample */
- void QSPI_ConfigRxSampleEdge(QSPI_RSE_T rse);
- void QSPI_ConfigRxSampleDelay(uint8_t delay);
- /* Clock stretch */
- void QSPI_EnableClockStretch(void);
- void QSPI_DisableClockStretch(void);
- /* Instruction, address, Wait cycle */
- void QSPI_ConfigInstLen(QSPI_INST_LEN_T len);
- void QSPI_ConfigAddrLen(QSPI_ADDR_LEN_T len);
- void QSPI_ConfigInstAddrType(QSPI_INST_ADDR_TYPE_T type);
- void QSPI_ConfigWaitCycle(uint8_t cycle);
- /* IO */
- void QSPI_OpenIO(void);
- void QSPI_CloseIO(void);
- /* Transmission mode */
- void QSPI_ConfigTansMode(QSPI_TRANS_MODE_T mode);
- /* Rx and Tx data */
- uint32_t QSPI_RxData(void);
- void QSPI_TxData(uint32_t data);
- /* Slave */
- void QSPI_EnableSlave(void);
- void QSPI_DisableSlave(void);
- /* Interrupt */
- void QSPI_EnableInterrupt(uint32_t interrupt);
- void QSPI_DisableInterrupt(uint32_t interrupt);
- /* Flag */
- uint8_t QSPI_ReadStatusFlag(QSPI_FLAG_T flag);
- void QSPI_ClearStatusFlag(void);
- uint8_t QSPI_ReadIntFlag(QSPI_INT_FLAG_T flag);
- void QSPI_ClearIntFlag(uint32_t flag);
- /**@} end of group QSPI_Functions*/
- /**@} end of group QSPI_Driver*/
- /**@} end of group APM32F10x_StdPeriphDriver*/
- #ifdef __cplusplus
- }
- #endif
- #endif /* __APM32F10X_QSPI_H */
|