blob: 4d410b7502b851bbec5af24e8a6ea7ce1fd5a70e [file] [log] [blame]
/*******************************************************************************
* Copyright by ZTE Corporation.
*
* File Name:
* File Mark:
* Description:
* Others:
* Version: v0.1
* Author: wuhui
* Date: 2017-1-13
* History 1:
* Date:
* Version:
* Author:
* Modification:
* History 2:
********************************************************************************/
#ifndef _DRVS_SPICC_H
#define _DRVS_SPICC_H
/****************************************************************************
* Include files
****************************************************************************/
#include "drvs_chip_cfg.h"
#include "drvs_dma.h"
#include "drvs_sys.h"
/****************************************************************************
* Macros
****************************************************************************/
//BASE ADDRESSS
#define SSP1_FORCAM_BASE (SPI1_REG_BASE+0x0000)
#define SSP1_COMCTRL_MS_OFFSET (2)
#define SSP1_COMCTRL_SSPE_OFFSET (1)
#define SSP1_FMTCTRL_LaneNum_OFFSET (13)
#define SSP1_FMTCTRL_LaneNum_SIZE (2)
#define SSP1_FMTCTRL_CAMMode_OFFSET (12)
#define SSP1_FIFOCTRL_RXFIFOTHRED_OFFSET (4)
#define SSP1_FIFOCTRL_RXFIFOTHRED_SIZE (4)
#define SSP1_FIFOCTRL_RXFIFOCNTR_OFFSET (5)
#define SSP1_FIFOCTRL_RXFIFOCNTR_SIZE (7)
#define SSP1_FIFOCTRL_RXDMAEN_OFFSET (2)
#define SSP1_SYNC_CODE_OFFSET (0)
#define SSP1_CAMFIFO_RST_OFFSET (1)
#define SSP1_SAMPLE_MODE_OFFSET (2)
#define SSP1_ID_SOL_OFFSET (24)
#define SSP1_ID_EOF_OFFSET (16)
#define SSP1_ID_SOF_OFFSET (8)
#define SSP1_ID_SYNC_SIZE (8)
#define SSP1_PACKETSIZE_OFFSET (0)
#define SSP1_PACKETSIZE_SIZE (16)
//²»Í¬´«Êä¸ñʽʱµÄID ¶¨Òå
#define MTK_START (0x01)
#define MTK_DATA_PACKET (0x40)
#define MTK_END (0x00)
#define BT656_START (0xab)
#define BT656_LINE_START (0x80)
#define BT656_END (0xb6)
#define set_reg_bit(regName, bitAddr, bitValue) \
do{ \
if(bitValue == TRUE) \
reg32(regName) |= (0x1<<bitAddr); \
else \
reg32(regName) &= ~(0x1<<bitAddr); \
}while(0)
#define set_reg_bits(regName, bitsAddr, bitsLen, bitsValue) \
do{ \
reg32(regName) = (reg32(regName)&(~(((0x1<<bitsLen)-0x1)<<bitsAddr)))|(bitsValue<<bitsAddr);\
}while(0)
#define read_reg_bits(regName, bitsAddr, bitsLen) ((reg32(regName)>>bitsAddr)&((0x1<<bitsLen)-0x1))
#define read_reg_bit(regName, bitsAddr) ((reg32(regName)>>bitsAddr)&0x1)
/****************************************************************************
* Types
****************************************************************************/
typedef volatile struct _T_SPICC_Regs
{
UINT32 SSP1_VER; //0x00
UINT32 SSP1_COM_CTRL; //0x04
UINT32 SSP1_FMT_CTRL; //0x08
UINT32 SSP1_DATA_REG; //0x0C
UINT32 SSP1_FIFO_CTRL; //0x10
UINT32 SSP1_FIFO_STA; //0x14
UINT32 SSP1_INT_EN; //0x18
UINT32 SSP1_INT_STACLR; //0x1C
UINT32 SSP1_TIMING; //0x20
UINT32 Reserved[3]; //0x24~0x2C
UINT32 SSP1_SYNC_CODE; //0x30
UINT32 SSP1_DEBUG; //0x34
UINT32 SSP1_PACKET_SIZE; //0x38
}T_SPICC_Regs;
typedef enum _T_SSP1_MSMode
{
SSP1_AS_MASTER = 0x0,
SSP1_AS_SLAVE = 0x1,
MAX_MS_MODE = 0X02
}T_SPICC_MSMode;
typedef enum
{
DISABLE = 0,
ENABLE =1,
MAX_ENABLE_TYPE =2
}T_SPICC_ENABLE_TYPE;
typedef enum _T_SPICC_LaneNum
{
LANE_1_CAM = 0,
LANE_2_CAM = 1,
LANE_4_CAM = 2,
LANE_MAX_CAM = 3
}T_SPICC_LaneNum;
typedef enum _T_SPICC_CamMode
{
SSP1_AS_NORMAL = 0,
SSP1_AS_CAMERA = 1,
MAX_SSP1_CAMMODE = 2
}T_SPICC_CamMode;
typedef enum
{
RAW_DATA =0,
PURE_DATA = 1,
MAX_SAMPLE_MODE =2
}T_SPICC_ImageSampleMode;
typedef enum
{
BT656_MODE = 0,
MTK_MODE = 1,
MAX_TRANSFER_MODE =2
}T_SPICC_ImageTransferMode;
typedef enum
{
RX_OVERRUN_IE = 0,
RX_FULL_IE = 2,
RX_THRED_IE = 4,
CAM_SOF_IE = 7,
CAM_EOF_IE = 8,
MAX_SSP1_INT_EN = 9
}T_SPICC_IntEn;
typedef enum
{
eRESET =0,
eRELEASE = 1,
MAX_FIFOCtrl_TYPE =2
}T_SPICC_CamFIFORst;
typedef struct _T_zDrvSPICC_Device
{
T_SPICC_ImageTransferMode transMode;
T_SPICC_ImageSampleMode samMode;
T_SPICC_LaneNum laneNum;
UINT32 packetSize;
}T_zDrvSPICC_Device;
typedef struct _T_SPICC_DevCtrl
{
T_SPICC_Regs* regPtr;
UINT32 rxDmaChl; // ssp rx Dma channel number
}T_SPICC_DevCtrl;
/****************************************************************************
* Constants
****************************************************************************/
/****************************************************************************
* Global Variables
****************************************************************************/
/****************************************************************************
* Function Prototypes
****************************************************************************/
SINT32 zDrvSPICC_Initiate(VOID);
SINT32 zDrvSPICC_Open(T_zDrvSPICC_Device *spicc_Dev);
SINT32 zDrvSPICC_Close(void);
SINT32 zDrvSPICC_DmaRxloop(zDrvDma_CallbackFunc CallBack,T_ZDrvDma_ChannelDef *rxRegDmaChl,UINT32 transferListNum);
SINT32 zDrvSPICC_DisableDmaRxloop(VOID);
SINT32 zDrvSPICC_DeAllocDmaRxCh(VOID);
VOID zDrvSPICC_ClkGateCtrl(T_ZDrvSysClk_Gate ClkCtrl);
#endif/*_FILENAME_H*/