|
|
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
// File name : ssi_drv.h
|
|
|
// Version : V0.1
|
|
|
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
#ifndef __SSI_DRV_H__
|
|
|
#define __SSI_DRV_H__
|
|
|
|
|
|
#include "memmap.h"
|
|
|
#include "ssi_reg.h"
|
|
|
//#include "test_demo.h"
|
|
|
|
|
|
#ifdef SSI_DEMO
|
|
|
#define SSI_DMA_INT
|
|
|
#endif
|
|
|
|
|
|
#define QUAD_BAUDR (0x02) /*必须为偶数,且最小值为2*/
|
|
|
|
|
|
#define rSWAPCR (*(unsigned char *)0x4000001c)
|
|
|
|
|
|
//w25q128 CMD
|
|
|
#define DUMMY_BYTE 0xa5
|
|
|
#define READ_ID_CMD 0x90
|
|
|
#define WRITE_EN_CMD 0x06
|
|
|
#define SECT_ERASE_CMD 0x20
|
|
|
#define GET_SAT1_CMD 0x05
|
|
|
#define READ_CMD 0x03
|
|
|
#define PAGE_PROG_CMD 0x02
|
|
|
#define GET_SAT2_CMD 0x35
|
|
|
#define PROG_STA2_CMD 0x31
|
|
|
#define DUAL_READ_CMD 0x3b
|
|
|
#define QUAD_PROG_CMD 0x32
|
|
|
#define QUAD_READ_CMD 0x6b
|
|
|
#define QPI_READ_CMD 0x0b
|
|
|
#define QPI_ENTER_CMD 0x38
|
|
|
#define QPI_EXIT_CMD 0xFF
|
|
|
#define SET_READ_PARA_CMD 0xc0
|
|
|
|
|
|
typedef enum
|
|
|
{
|
|
|
CMD_READ = 0,
|
|
|
CMD_WRITE,
|
|
|
DATA_READ,
|
|
|
DATA_WRITE,
|
|
|
}QPI_OPT_MODE;
|
|
|
|
|
|
extern volatile int dma_int;
|
|
|
|
|
|
extern void SSI_DMA_ISR(void);
|
|
|
extern void SSI_Standard_Init(SSI_TypeDef *SSIx);
|
|
|
extern void SSI_DUAL_Init(SSI_TypeDef *SSIx, UINT32 data_len, UINT8 waitCycles);
|
|
|
extern void SSI_QUAD_Init(SSI_TypeDef *SSIx, int read, int num, int waitCycles);
|
|
|
extern void SSI_QPI_Init(SSI_TypeDef *SSIx, QPI_OPT_MODE mode, UINT32 data_len, UINT8 waitCycles);
|
|
|
extern void SSI_EFlash_Set_Read_Para(SSI_TypeDef *SSIx);
|
|
|
extern void SSI_EFlash_QPI_Enter(SSI_TypeDef *SSIx);
|
|
|
extern void SSI_EFlash_QPI_EXIT(SSI_TypeDef *SSIx);
|
|
|
|
|
|
|
|
|
extern UINT16 Read_ID(SSI_TypeDef *SSIx);
|
|
|
extern void SSI_EFlash_Read(SSI_TypeDef *SSIx, unsigned int addr, unsigned char *buf, int num);
|
|
|
extern unsigned char SSI_EFlash_Get_Status1(SSI_TypeDef *SSIx);
|
|
|
extern unsigned char SSI_EFlash_QPI_Get_Status1(SSI_TypeDef *SSIx);
|
|
|
extern void SSI_EFlash_Write_Enable(SSI_TypeDef *SSIx);
|
|
|
extern void SSI_EFlash_QPI_Write_Enable(SSI_TypeDef *SSIx);
|
|
|
extern void SSI_EFlash_Sector_Erase(SSI_TypeDef *SSIx, unsigned int addr);
|
|
|
extern void SSI_EFlash_QPI_Sector_Erase(SSI_TypeDef *SSIx, unsigned int addr);
|
|
|
extern void SSI_EFlash_Program(SSI_TypeDef *SSIx, unsigned int addr, unsigned char *buf, int num);
|
|
|
extern unsigned char SSI_EFlash_Get_Status2(SSI_TypeDef *SSIx);
|
|
|
extern void SSI_EFlash_Prog_Status2(SSI_TypeDef *SSIx, unsigned char val);
|
|
|
extern void SSI_EFlash_QUAD_Program(SSI_TypeDef *SSIx, unsigned int addr, unsigned char *buf, int num);
|
|
|
extern void SSI_EFlash_QUAD_Read(SSI_TypeDef *SSIx, unsigned int addr, unsigned char *buf, int num);
|
|
|
extern void SSI_EFlash_QPI_Program(SSI_TypeDef *SSIx, unsigned int addr, unsigned char *buf, int num);
|
|
|
extern void SSI_EFlash_QPI_Read(SSI_TypeDef *SSIx, unsigned int addr, unsigned char *buf, int num);
|
|
|
extern void SSI_Std_Dma_Trig(SSI_TypeDef *SSIx, unsigned cmd, unsigned int addr, int dmaConf);
|
|
|
extern void SSI_EFlash_DUAL_Read(SSI_TypeDef *SSIx, unsigned int addr, unsigned char *buf, int num);
|
|
|
/*******************************************************************************
|
|
|
* Function Name : void SSI_STD_DMA_Send
|
|
|
* Description : spi dma传送函数
|
|
|
* Input : - SPIx: SPI 基地址
|
|
|
* - dma_ch: DMA channel
|
|
|
* - psend: 发送数据地址
|
|
|
* _ addr: SPI flash地址
|
|
|
* - length: 传输数据长度
|
|
|
* - binten: 是否开启中断模式
|
|
|
*
|
|
|
* Output : None
|
|
|
* Return : None
|
|
|
******************************************************************************/
|
|
|
extern void SSI_STD_DMA_Send(SSI_TypeDef *SSIx,int dma_ch, UINT8* psend, UINT32 addr, UINT32 length, BOOL binten);
|
|
|
/*******************************************************************************
|
|
|
* Function Name : SSI_Std_DMA_Read
|
|
|
* Description : spi dma接收函数
|
|
|
* Input : - SPIx: SPI 基地址
|
|
|
* - dma_ch: DMA channel
|
|
|
* - pread: 发送数据地址
|
|
|
* - addr: spi flash地址
|
|
|
* - length : 传输数据长度
|
|
|
* - binten : 是否开启中断模式
|
|
|
*
|
|
|
* Output : None
|
|
|
* Return : None
|
|
|
******************************************************************************/
|
|
|
extern void SSI_STD_DMA_Read(SSI_TypeDef *SSIx,int dma_ch, UINT8* pread, UINT32 addr, UINT32 length, BOOL binten);
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : SSI_DUAL_DMA_Read
|
|
|
* Description : spi dma接收函数
|
|
|
* Input : - SPIx: SPI 基地址
|
|
|
* - dma_ch: DMA channel
|
|
|
* - pread: 发送数据地址
|
|
|
* - addr: spi flash地址
|
|
|
* - length : 传输数据长度
|
|
|
* - binten : 是否开启中断模式
|
|
|
*
|
|
|
* Output : None
|
|
|
* Return : None
|
|
|
******************************************************************************/
|
|
|
extern void SSI_DUAL_DMA_Read(SSI_TypeDef *SSIx,int dma_ch, UINT8* pread, UINT32 addr, UINT32 length, BOOL binten);
|
|
|
|
|
|
#endif /* __SSI_DRV_H__ */
|
|
|
|