98 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			98 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/****************************************************************************
 | 
						|
 | 
						|
Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED.
 | 
						|
 | 
						|
This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT
 | 
						|
be copied by any method or incorporated into another program without
 | 
						|
the express written consent of Aerospace C.Power. This Information or any portion
 | 
						|
thereof remains the property of Aerospace C.Power. The Information contained herein
 | 
						|
is believed to be accurate and Aerospace C.Power assumes no responsibility or
 | 
						|
liability for its use in any way and conveys no license or title under
 | 
						|
any patent or copyright and makes no representation or warranty that this
 | 
						|
Information is free from patent or copyright infringement.
 | 
						|
 | 
						|
****************************************************************************/
 | 
						|
 | 
						|
#ifndef __QSPI_H
 | 
						|
#define __QSPI_H
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
extern "C" {
 | 
						|
#endif
 | 
						|
 | 
						|
#define HAL_QPSI_TIMEOUT_DEFAULT_VALUE ((uint32_t)5000U)/* 5 s */
 | 
						|
#define SFC_WIP_IS_BUSY_BIT (1<<0)
 | 
						|
 | 
						|
/**
 | 
						|
  * @brief  QSPI Status structures definition
 | 
						|
  */
 | 
						|
typedef enum
 | 
						|
{
 | 
						|
    SMC_QSPI_OK       = 0x00U,
 | 
						|
    SMC_QSPI_ERROR    = 0x01U,
 | 
						|
    SMC_QSPI_BUSY     = 0x02U,
 | 
						|
    SMC_QSPI_TIMEOUT  = 0x03U,
 | 
						|
    SMC_QSPI_NOT_SUPPORTED = 0x04U
 | 
						|
} smc_sts_type_t;
 | 
						|
 | 
						|
 | 
						|
typedef enum
 | 
						|
{
 | 
						|
    MOD_SMC_OP_REV0             = 0x00U,
 | 
						|
    MOD_SMC_OP_ERV1             = 0x01U,
 | 
						|
    MOD_SMC_OP_TRANS            = 0x02U,
 | 
						|
    MOD_SMC_OP_REG_WR           = 0x03U
 | 
						|
} smc_operation_mode_t;
 | 
						|
 | 
						|
typedef enum
 | 
						|
{
 | 
						|
    MOD_SMC_READ_SIG            = 0x00U,
 | 
						|
    MOD_SMC_READ_FAST           = 0x01U,
 | 
						|
    MOD_SMC_READ_QUAD           = 0x02U
 | 
						|
} smc_read_mode_t;
 | 
						|
 | 
						|
typedef enum
 | 
						|
{
 | 
						|
    SMC_REG_ACCESS              = 0x00U,
 | 
						|
    SMC_BUF_ACCESS              = 0x01U
 | 
						|
} smc_access_type_t;
 | 
						|
 | 
						|
/**
 | 
						|
  * @brief  QSPI Command structure definition
 | 
						|
  */
 | 
						|
typedef struct
 | 
						|
{
 | 
						|
    uint8_t smc_dlen;               /* spi trans data length, unit is byte */
 | 
						|
    uint8_t smc_cmode;              /* Operation Mode */
 | 
						|
    smc_operation_mode_t smc_mode;  /* spi continus mode byte */
 | 
						|
    bool_t emc_crypt_mode;          /* emc data cryption mode, 0- bypass mode, 1- cryption mode */
 | 
						|
    smc_read_mode_t cache_rd_mode;  /* read mode */
 | 
						|
    bool_t qpi_mode;                /* qpi mode en */
 | 
						|
    uint8_t cmd;                    /* Specifies the Instruction to be sent */
 | 
						|
    uint32_t addr;                  /* Specifies the Address to be sent */
 | 
						|
    uint32_t pe_wait_time;          /* program or erase wait time, unit is clock cycle num */
 | 
						|
    uint32_t smc_rd_sts;            /* status */
 | 
						|
    uint32_t smc_wr_sts;            /* status */
 | 
						|
} smc_op_t;
 | 
						|
 | 
						|
bool_t is_smc_cmd_busy();
 | 
						|
smc_sts_type_t hal_smc_qspi_start();
 | 
						|
smc_sts_type_t hal_smc_qspi_quad_cfg(uint8_t clk);
 | 
						|
smc_sts_type_t hal_smc_spi_cfg(uint8_t clk);
 | 
						|
smc_sts_type_t hal_smc_qspi_rst_en();
 | 
						|
smc_sts_type_t hal_smc_qspi_rst();
 | 
						|
smc_sts_type_t hal_smc_qspi_command(smc_op_t *cmd, uint32_t timeout);
 | 
						|
smc_sts_type_t hal_smc_qspi_receive(uint8_t *data, uint32_t len, uint8_t is_buf, uint32_t timeout);
 | 
						|
smc_sts_type_t hal_smc_qspi_transmit(uint8_t *data, uint32_t len, uint8_t is_buf, uint32_t timeout);
 | 
						|
smc_sts_type_t hal_smc_disable();
 | 
						|
 | 
						|
void hal_smc_clk_div_set(uint8_t div);
 | 
						|
void hal_smc_clk_out(int enable);
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
#endif
 | 
						|
 |