📄 spi.h
字号:
/*******************************************************************************
* Copyright: Copyright (c) 2007. Hisilicon Technologies, CO., LTD.
* Version: V300R001B03
* Filename: spi.h
* Description: spi总线驱动头文件
* History:
1.Created by wubin on 2007/12/21
*******************************************************************************/
#ifndef __SPI_H__
#define __SPI_H__
#include "syslib.h"
#ifdef __cplusplus
extern "C" {
#endif
#define IOCMG_BASE_ADDR 0x20041000
// Bitfield macros that use rely on bitfield width/shift information
// defined in CSP header files
#define CSP_BITFMASK(bit) (((1U << (bit ## _WID)) - 1) << (bit ## _LSH))
#define CSP_BITFVAL(bit, val) ((val) << (bit ## _LSH))
//------------------------------------------------------------------------------
// REGISTER LAYOUT
//------------------------------------------------------------------------------
typedef struct
{
UINT32 SSPCR0;
UINT32 SSPCR1;
UINT32 SSPDR;
UINT32 SSPSR;
UINT32 SSPCPSR;
UINT32 SSPIMSC;
UINT32 SSPRIS;
UINT32 SSPMIS;
UINT32 SSPICR;
UINT32 SSPDMACR;
} SPI_REG, *PSPI_REG;
//SSPCR0
#define SCR 0x0900 //scr=9,cpsdvr=2,division_rate=2*(1+9)=20
#define SPH 0x0080 //SPH=1
#define SPO 0x0040 //SPO=1
#define FRF 0x0000 //FRF=0,SPI mode
#define DSS 0x0007 //DSS=7,8 bit
//SSPCR1
#define SOD 0x0008 //SOD=1
#define MS 0x0000 //MS=0,master
#define SSE_DIS 0x0000 //SSE=0,disable spi
#define SSE_BIT 0x0002 //SSE=0,disable spi,SSE=1,enable spi
#define LBM 0x0000 //LBM=0,Loop back mode disabled
#ifdef HISI3610_CHIP
//SSPCPSR
#define CPSDVSR 0x0004
#else
//SSPCPSR
#define CPSDVSR 0x0002
#endif
#define SYSCON_11BIT 0x00000800
#define SYSCON_10BIT 0x00000400
//------------------------------------------------------------------------------
// REGISTER BIT FIELD POSITIONS (LEFT SHIFT)
//------------------------------------------------------------------------------
#define CSPI_SSPCR0_DSS_LSH 0
#define CSPI_SSPCR0_FRF_LSH 4
#define CSPI_SSPCR0_SPO_LSH 6
#define CSPI_SSPCR0_SPH_LSH 7
#define CSPI_SSPCR0_SCR_LSH 8
#define CSPI_SSPCR1_LBM_LSH 0
#define CSPI_SSPCR1_SSE_LSH 1
#define CSPI_SSPCR1_MS_LSH 2
#define CSPI_SSPCR1_SOD_LSH 3
#define CSPI_SSPDR_DATA_LSH 0
#define CSPI_SSPSR_TFE_LSH 0
#define CSPI_SSPSR_TNF_LSH 1
#define CSPI_SSPSR_RNE_LSH 2
#define CSPI_SSPSR_RFF_LSH 3
#define CSPI_SSPSR_BSY_LSH 4
#define CSPI_SSPCPSR_CPSDVSR_LSH 0
#define CSPI_SSPIMSC_RORIM_LSH 0
#define CSPI_SSPIMSC_RTIM_LSH 1
#define CSPI_SSPIMSC_RXIM_LSH 2
#define CSPI_SSPIMSC_TXIM_LSH 3
#define CSPI_SSPRIS_RORRIS_LSH 0
#define CSPI_SSPRIS_RTRIS_LSH 1
#define CSPI_SSPRIS_RXRIS_LSH 2
#define CSPI_SSPRIS_TXRIS_LSH 3
#define CSPI_SSPMIS_RORMIS_LSH 0
#define CSPI_SSPMIS_RTMIS_LSH 1
#define CSPI_SSPMIS_RXMIS_LSH 2
#define CSPI_SSPMIS_TXMIS_LSH 3
#define CSPI_SSPICR_RORIC_LSH 0
#define CSPI_SSPICR_RTIC_LSH 1
#define CSPI_SSPDMACR_RXDMAE_LSH 0
#define CSPI_SSPDMACR_TXDMAE_LSH 1
//------------------------------------------------------------------------------
// REGISTER BIT FIELD WIDTHS
//------------------------------------------------------------------------------
#define CSPI_SSPCR0_DSS_WID 4
#define CSPI_SSPCR0_FRF_WID 2
#define CSPI_SSPCR0_SPO_WID 1
#define CSPI_SSPCR0_SPH_WID 1
#define CSPI_SSPCR0_SCR_WID 8
#define CSPI_SSPCR1_LBM_WID 1
#define CSPI_SSPCR1_SSE_WID 1
#define CSPI_SSPCR1_MS_WID 1
#define CSPI_SSPCR1_SOD_WID 1
#define CSPI_SSPDR_DATA_WID 16
#define CSPI_SSPSR_TFE_WID 1
#define CSPI_SSPSR_TNF_WID 1
#define CSPI_SSPSR_RNE_WID 1
#define CSPI_SSPSR_RFF_WID 1
#define CSPI_SSPSR_BSY_WID 1
#define CSPI_SSPCPSR_CPSDVSR_WID 8
#define CSPI_SSPIMSC_RORIM_WID 1
#define CSPI_SSPIMSC_RTIM_WID 1
#define CSPI_SSPIMSC_RXIM_WID 1
#define CSPI_SSPIMSC_TXIM_WID 1
#define CSPI_SSPRIS_RORRIS_WID 1
#define CSPI_SSPRIS_RTRIS_WID 1
#define CSPI_SSPRIS_RXRIS_WID 1
#define CSPI_SSPRIS_TXRIS_WID 1
#define CSPI_SSPMIS_RORMIS_WID 1
#define CSPI_SSPMIS_RTMIS_WID 1
#define CSPI_SSPMIS_RXMIS_WID 1
#define CSPI_SSPMIS_TXMIS_WID 1
#define CSPI_SSPICR_RORIC_WID 1
#define CSPI_SSPICR_RTIC_WID 1
#define CSPI_SSPDMACR_RXDMAE_WID 1
#define CSPI_SSPDMACR_TXDMAE_WID 1
//------------------------------------------------------------------------------
// REGISTER BIT WRITE VALUES
//------------------------------------------------------------------------------
//SSPCR0
#define CSPI_SSPCR0_DSS_4BIT 0x03 // 4-bit transfer
#define CSPI_SSPCR0_DSS_5BIT 0x04 // 5-bit transfer
#define CSPI_SSPCR0_DSS_6BIT 0x05 // 6-bit transfer
#define CSPI_SSPCR0_DSS_7BIT 0x06 // 7-bit transfer
#define CSPI_SSPCR0_DSS_8BIT 0x07 // 8-bit transfer
#define CSPI_SSPCR0_DSS_9BIT 0x08 // 9-bit transfer
#define CSPI_SSPCR0_DSS_10BIT 0x09 // 10-bit transfer
#define CSPI_SSPCR0_DSS_11BIT 0x0A // 11-bit transfer
#define CSPI_SSPCR0_DSS_12BIT 0x0B // 12-bit transfer
#define CSPI_SSPCR0_DSS_13BIT 0x0C // 13-bit transfer
#define CSPI_SSPCR0_DSS_14BIT 0x0D // 14-bit transfer
#define CSPI_SSPCR0_DSS_15BIT 0x0E // 15-bit transfer
#define CSPI_SSPCR0_DSS_16BIT 0x0F // 16-bit transfer
#define CSPI_SSPCR0_FRF_SPI 0x00 // Motorola SPI frame format
#define CSPI_SSPCR0_FRF_TI 0x01 // TI synchronous serial frame format
#define CSPI_SSPCR0_FRF_NM 0x02 // National Microwire frame format
#define CSPI_SSPCR0_FRF_RESERVED 0x03 // Reserved
#define CSPI_SSPCR0_SPO_ACTIVE_LOW 0x0 // Active low polarity
#define CSPI_SSPCR0_SPO_ACTIVE_HIGH 0x1 // Active high polarity
#define CSPI_SSPCR0_SPH_TRAILING 0x0 // Phase 0 operation
#define CSPI_SSPCR0_SPH_LEADING 0x1 // Phase 1 operation
//SSPCR1
#define CSPI_SSPCR1_LBM_DISABLE 0x0 // Loop back mode disabled
#define CSPI_SSPCR1_LBM_ENABLE 0x1 // Loop back mode enabled
#define CSPI_SSPCR1_SSE_DISABLE 0x0 // SSP disabled
#define CSPI_SSPCR1_SSE_ENABLE 0x1 // SSP enabled
#define CSPI_SSPCR1_MS_MASTER 0x0 // Master mode
#define CSPI_SSPCR1_MS_SLAVE 0x1 // Slave mode
#define CSPI_SSPCR1_SOD_ENABLE 0x0 // Enable drive out in slave mode
#define CSPI_SSPCR1_SOD_DISABLE 0x1 // Disable drive out in slave mode
//SSPIMSC
#define CSPI_SSPIMSC_RORIM_DISABLE 0x0 // Disable Receive FIFO overrun interrupt
#define CSPI_SSPIMSC_RORIM_ENABLE 0x1 // Enable Receive FIFO overrun interrupt
#define CSPI_SSPIMSC_RTIM_DISABLE 0x0 // Disable receive overtime interrupt
#define CSPI_SSPIMSC_RTIM_ENABLE 0x1 // Enable receive overtime interrupt
#define CSPI_SSPIMSC_RXIM_DISABLE 0x0 // Disable RxFIFO half interrupt
#define CSPI_SSPIMSC_RXIM_ENABLE 0x1 // Enable RxFIFO half interrupt
#define CSPI_SSPIMSC_TXIM_DISABLE 0x0 // Disable TxFIFO half interrupt
#define CSPI_SSPIMSC_TXIM_ENABLE 0x1 // Enable TxFIFO half interrupt
#define SPI3CR0 0x04c7 //scr取4,
//SPH、SPO根据Hi6421V100电源管理芯片用户指南2.2.9节都取1,
//字长度为8bit
#define SPI3CR1 0x0008 //0x0009:Loopback模式;0x0008:禁止spi3,设为master
#ifdef HISI3610_CHIP
//在ASIC版本中,SPI的参考时钟是60MHz
#define SPI3CPSR 0x4 //cpsdvsr必须为偶数,取4,则分频比为4*(1+4)=20
#else
//在FPGA版本中,SPI的参考时钟是34MHz
#define SPI3CPSR 0x2 //cpsdvsr必须为偶数,取2,则分频比为2*(1+4)=10
#endif
#define READBIT 1
#define WRITEBIT 0
#define DUMMYDATA 0x00
#define MMU5_NUM 0x03
BOOL InitLcdSPI(void);
BOOL bShowInfoNoErr(const UINT8 *pData, UINT8 length);
BOOL InitHi6421SPI(void);
BOOL ReadHi6421Register(UINT8 ucRegAddr, UINT8 *pData);
BOOL WriteHi6421Register(UINT8 ucRegAddr, UINT8 ucData, UINT8 ucMask);
#ifdef __cplusplus
}
#endif
#endif // __SPI_H__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -