⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spi850.h

📁 vxworks下MPC860的SPI操作源码
💻 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 + -