1 #ifndef _SPI_LOC_H
2 #define _SPI_LOC_H
3 /************************************************************************************************
4 * FILE PURPOSE: LOCAL SPI definitions
5 ************************************************************************************************
6 * FILE NAME: spi_loc.h
7 *
8 * DESCRIPTION: Defines the SPI hardware operation
9 *
10 ************************************************************************************************/
12 /* Register offsets */
13 #define SPI_REG_SPIGCR0 0x00
14 #define SPI_REG_SPIGCR1 0x04
15 #define SPI_REG_SPIFLG 0x10
16 #define SPI_REG_SPIPC0 0x14
17 #define SPI_REG_SPIDAT0 0x38
18 #define SPI_REG_SPIDAT1 0x3c
19 #define SPI_REG_SPIBUF 0x40
20 #define SPI_REG_SPIDELAY 0x48
21 #define SPI_REG_SPIFMT(x) (0x50 + ((x)*4))
23 /* Register values */
24 #define SPI_REG_VAL_SPIGCR0_RESET 0x0
25 #define SPI_REG_VAL_SPIGCR0_ENABLE 0x1
27 #define SPI_REG_VAL_SPIGCR1_XFER 0x01000003
28 #define SPI_REG_VAL_SPIGCR1_XFER_DISABLE 0
30 #define SPI_REG_SPIFLG_TX_EMPTY(v) ((v) & 0x0200)
31 #define SPI_REG_SPIFLG_RX_DATA(v) ((v) & 0x0100)
33 #define SPI_REG_VAL_SPIPC0_4PIN 0x01010e01 /* 1 pin input, 1 pin output, clock, cs0 */
34 #define SPI_REG_VAL_SPIPC0_5PIN 0x01010e03 /* Same as 3 pin with cs1 as well */
36 #define SPI_REG_SPIFMT_SET_PRESCALE(v, dev) (v) = BOOT_SET_BITFIELD((v),dev, 15, 8)
37 #define SPI_REG_SPIFMT_SET_CHARLEN(v, wid) (v) = BOOT_SET_BITFIELD((v),wid, 4, 0)
38 #define SPI_REG_SPIFMT_SET_MODE(v, mode) (v) = BOOT_SET_BITFIELD((v),mode, 17, 16)
39 #define SPI_REG_SPIFMT_SET_SHIFTDIR(v, dir) (v) = BOOT_SET_BITFIELD((v),dir, 20, 20)
41 #define SPI_REG_VAL_SPIFMT_SHIFT_MSB_FIRST 0
44 #define SPI_REG_SPIDELAY_SET_C2T(v, delay) (v) = BOOT_SET_BITFIELD((v), delay, 31, 24)
47 #define SPI_REG_SPIDAT1_SET_CSHOLD(v, hold) (v) = BOOT_SET_BITFIELD((v), hold, 28, 28)
48 #define SPI_REG_SPIDAT1_SET_WDELAY(v, delay) (v) = BOOT_SET_BITFIELD((v), delay, 26, 26)
49 #define SPI_REG_SPIDAT1_SET_CSNR(v, csel) (v) = BOOT_SET_BITFIELD((v), csel, 23, 16)
50 #define SPI_REG_SPIDAT1_SET_DATA(v, data) (v) = BOOT_SET_BITFIELD((v), data, 15, 0)
53 /* Commands */
54 #define SPI_COMMAND_WRITE 0x02
55 #define SPI_COMMAND_READ 0x03
56 #define SPI_COMMAND_READ_STATUS 0x05
57 #define SPI_COMMAND_WRITE_ENABLE 0x06
58 #define SPI_COMMAND_ERASE_SECTOR 0x20
60 SINT16 hw_spi_xfer (UINT32 nbytes, UINT8 *dataOut, UINT8 *dataIn, spiConfig_t *cfg, BOOL terminate);
62 #endif /* _SPI_LOC_H */