📄 spi850.h
字号:
#ifndef _SPI850_H
#define _SPI850_H
#define FAIL 1
#define SUCC 0
#ifdef APP_MPC852
#define USE_SET 0
#else
#define USE_SET 1
#endif
#define SPI_RX_BD 0x2D00 /*need to confirm:why?*/
#define SPI_TX_BD 0x2D08 /*need to confirm:为什么设置为0x400 ?*/
#define SPI_RX_BUFF 0x2D10
#define SPI_TX_BUFF 0x2D70
#define SPI_Rx_Tx_BUFF_LEN (SPI_TX_BUFF -SPI_RX_BUFF)
#define SPI_TX_1_BYTE 1
#define SPI_TX_2_BYTE 2
#define SPI_TX_3_BYTE 3
#define SPI_TX_4_BYTE 4
#define SPI_TX_BD_L 0x0800 /* buffer is last in frame */
#define SPI_TX_BD_I 0x1000 /* interrupt on transmit */
#define SPI_TX_BD_W 0x2000 /* last BD in ring */
#define SPI_TX_BD_R 0x8000 /* buffer is ready */
#define SPI_RX_BD_L 0x0800 /* buffer is last in frame */
#define SPI_RX_BD_I 0x1000 /* interrupt */
#define SPI_RX_BD_W 0x2000 /* last BD in ring */
#define SPI_RX_BD_E 0x8000 /* buffer is empty */
#define SPI_SPIE_TXB 0x02 /* buffer is empty */
#define SPI_SPIE_RXB 0x01 /* buffer is empty */
#define CPM_CR_FLG 0x1 /*CP Register 中表示现在是否有命令正在执行的标志:1:有命令执行*/
#define CPM_CR_CHANNEL_SPI 0x50 /*CP Regsiter 中SPI 通道号*/
#define CPM_CR_OPCODE_INIT_RT 0x0 /*CP Register 中表示Init Rx and Tx 的操作字*/
#define RFCR_BO_BE 0x18 /*Byte ordering:00 Reserved,01 PowerPC little-endian.1x Big-endian or true little-endian.*/
#define PB28 0x0008
#define PB29 0x0004
#define PB30 0x0002
#define RCCR(immrVal) ((U16*)(immrVal + 0x9C4))
#define CPCR(immrVal) ((U16*)(immrVal + 0x9C0))
#define RCTR1(immrVal) ((U16*)(immrVal + 0x9CC))
#define RCTR2(immrVal) ((U16*)(immrVal + 0x9CE))
#define RCTR3(immrVal) ((U16*)(immrVal + 0x9D0))
#define RCTR4(immrVal) ((U16*)(immrVal + 0x9D2))
#define PADIR(immrVal) ((U16*)(immrVal + 0x950))
#define PAPAR(immrVal) ((U16*)(immrVal + 0x952))
#define PAODR(immrVal) ((U16*)(immrVal + 0x954))
#define PADAT(base) ((volatile U16 *)((base) + 0x956)) /* PB Data Reg*/
#define SDMR(immrVal) ((U8*)(immrVal + 0x90C))
#define SDCR(immrVal) ((U32*)(immrVal + 0x030))
#define PBPAR(immrVal) ((U32*)(immrVal + 0xABC))
#define PBDIR(immrVal) ((U32*)(immrVal + 0xAB8))
#define PBODR(immrVal) ((U32*)(immrVal + 0xAC0))
#define PBDAT(base) ((volatile U32 *)((base) + 0x0AC4)) /* PB Data Reg*/
#define PCDIR(immrVal) ((U16*)(immrVal + 0x0960)) /* PC data dir */
#define PCPAR(immrVal) ((U16*)(immrVal + 0x0962)) /* PC pin assign*/
#define PCSO(immrVal) ((U16*)(immrVal + 0x0964)) /* PC options */
#define PCINT(immrVal) ((U16*)(immrVal + 0x0968)) /* PC intr ctrl */
#define PCDAT(immrVal) ((volatile U16*)((immrVal) + 0x0966)) /* PC data reg */
/*SPI 寄存器地址偏移*/
#define SPMODE(immrVal) ((U16*)(immrVal + 0xAA0))
#define SPIE(immrVal) ((U8*)(immrVal + 0xAA6))
#define SPIM(immrVal) ((U8*)(immrVal + 0xAAA))
#define SPCOM(immrVal) ((U8*)(immrVal + 0xAAD))
#if USE_SET
/*Dual-port ram 中SPI 参数相对偏移为0x1D80*/
#define SPI_PARAMETER_RAM_OFF 0x3A00
/*#define SPI_BASE(immrVal) ((U16*)(immrVal + 0x1D80))*/
#define SPI_BASE(immrVal) ((U16*)(immrVal + 0x3DAC))
#define PPC860_DPR_SPI(immrVal) (immrVal + SPI_PARAMETER_RAM_OFF)
#else
#define SPI_PARAMETER_RAM_OFF 0x3d80
#define PPC860_DPR_SPI(immrVal) (immrVal + SPI_PARAMETER_RAM_OFF)
#endif
/*SPI Parameter RAM Memory Map*/
#define SPI_RBASE(baseaddr) ((U16*)(baseaddr+0))
#define SPI_TBASE(baseaddr) ((U16*)(baseaddr+2))
#define SPI_RFCR(baseaddr) ((U8*)(baseaddr+4))
#define SPI_TFCR(baseaddr) ((U8*)(baseaddr+5))
#define SPI_MRBLR(baseaddr) ((U16*)(baseaddr+6))
#define SPI_RSTATE(baseaddr) ((U32*)(baseaddr+8))
#define SPI_RBPTR(baseaddr) ((U16*)(baseaddr+0x10))
#define SPI_TSTATE(baseaddr) ((U32*)(baseaddr+18))
#define SPI_TBPTR(baseaddr) ((U16*)(baseaddr+0x20))
/*SPI Mode Register 参数的宏定义*/
#define SPMODE_EN 0x0100
#define SPMODE_MS 0x0200
#define SPMODE_REV 0x0400
#define SPMODE_DIV16 0x0800
#define SPMODE_CP 0x1000
#define SPMODE_CI 0x2000
#define SPMODE_LOOP 0x4000
#define SPCOM_STR 0x80
/*Port D 相关的宏*/
#define PDDIR(immrVal) ((U16*)(immrVal+0x970))
#define PDPAR(immrVal) ((U16*)(immrVal+0x972))
#define PDDAT(immrVal) ((U16*)(immrVal+0x976))
#define PD15 0x0001
#define PD14 0x0002
#define PD13 0x0004
#define PD12 0x0008
#define PD11 0x0010
#define PD10 0x0020
#define PD9 0x0040
#define PD8 0x0080
#define PD7 0x0100
#define PD6 0x0200
#define PD3 0x1000
#define PDC_SN 0xFFC3 /*slot NULL for 96*/
#define PDC_S5 0x0004 /*slot 5 for 96*/
#define PDC_S6 0x0008 /*slot 6 for 96*/
#define PDC_S7 0x000C /*slot 7 for 96*/
#define PDC_S8 0x0010 /*slot 8 for 96*/
#define PDC_S9 0x0014 /*slot 9 for 96*/
#define PDC_S10 0x0018 /*slot 10 for 96*/
#define PDC_S11 0x001C /*slot 11 for 96*/
#define PDC_S12 0x0020 /*slot 12 for 96*/
#define PDC_S13 0x0024 /*slot 13 for 96*/
#define PDC_S14 0x0028 /*slot 14 for 96*/
#define PDC_S15 0x002C /*slot 15 for 96*/
#define PDC_S16 0x0030 /*slot 16 for 96*/
#define PB31 0x00000001
/*need to confirm:CLEAR_EVENTS:似乎没有做任何事情?*/
#define CLEAR_EVENTS(immrVal) (*SPIE(immrVal) = 0xFF)
#define START_XMIT(immrVal) (*SPCOM(immrVal) = SPCOM_STR)
typedef struct tagSPI_BUF
{
volatile U16 statusMode;
volatile U16 dataLength;
volatile U8* dataPointer;
}SPI_BUF;
#define PA15 0x0001
#define PA14 0x0002
#define PA13 0x0004
#define PA12 0x0008
#define PA11 0x0010
#define PA10 0x0020
#define PA9 0x0040
#define PA8 0x0080
#define PA7 0x0100
#define PA6 0x0200
#define PA3 0x1000
#define PA2 0x2000
#define PA1 0x4000
#define PA0 0x8000
#define PB15 0x00010000
#define PB16 0x8000
#define PB17 0x4000
#define PB18 0x2000
#define PB19 0x1000
#define PB20 0x0800
#define PB21 0x0400
#define PB22 0x0200
#define PB23 0x0100
#define PC4 0x0800
#define PC5 0x0400
#define PC6 0x0200
#define PC7 0x0100
#define PC8 0x0080
#define PC9 0x0040
#define PC10 0x0020
#define PC11 0x0010
#define PC12 0x0008
#define PC13 0x0004
#define PC14 0x0002
#define PC15 0x0001
#define PD4 0x0800
#define PD5 0x0400
void spi850_enable_cssel(U16 usPortID);
void spi850_disable_cssel(U16 usPortID);
U32 spi850_read_from_peb3265(U16 usPortID,U8 cmd1,U8 cmd2,U32 len,U8*pvalue);
U32 spi850_write_to_peb3265_2cmd(U16 usPortID,U8 cmd1,U8 cmd2,U32 len,U8*pvalue);
U32 spi850_write_to_peb3265_1cmd(U16 usPortID,U8 cmd1);
U32 spi850_clear_to_peb3265(U16 usPortID,U8 cmd1,U8 cmd2,U32 len);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -