您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 
 
 

121 行
4.8 KiB

// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 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__ */