spi.h 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. // See LICENSE for license details.
  2. #ifndef _SIFIVE_SPI_H
  3. #define _SIFIVE_SPI_H
  4. /* Register offsets */
  5. #define SPI_REG_SCKDIV 0x00
  6. #define SPI_REG_SCKMODE 0x04
  7. #define SPI_REG_CSID 0x10
  8. #define SPI_REG_CSDEF 0x14
  9. #define SPI_REG_CSMODE 0x18
  10. #define SPI_REG_DCSSCK 0x28
  11. #define SPI_REG_DSCKCS 0x2a
  12. #define SPI_REG_DINTERCS 0x2c
  13. #define SPI_REG_DINTERXFR 0x2e
  14. #define SPI_REG_FMT 0x40
  15. #define SPI_REG_TXFIFO 0x48
  16. #define SPI_REG_RXFIFO 0x4c
  17. #define SPI_REG_TXCTRL 0x50
  18. #define SPI_REG_RXCTRL 0x54
  19. #define SPI_REG_FCTRL 0x60
  20. #define SPI_REG_FFMT 0x64
  21. #define SPI_REG_IE 0x70
  22. #define SPI_REG_IP 0x74
  23. /* Fields */
  24. #define SPI_SCK_POL 0x1
  25. #define SPI_SCK_PHA 0x2
  26. #define SPI_FMT_PROTO(x) ((x) & 0x3)
  27. #define SPI_FMT_ENDIAN(x) (((x) & 0x1) << 2)
  28. #define SPI_FMT_DIR(x) (((x) & 0x1) << 3)
  29. #define SPI_FMT_LEN(x) (((x) & 0xf) << 16)
  30. /* TXCTRL register */
  31. #define SPI_TXWM(x) ((x) & 0xffff)
  32. /* RXCTRL register */
  33. #define SPI_RXWM(x) ((x) & 0xffff)
  34. #define SPI_IP_TXWM 0x1
  35. #define SPI_IP_RXWM 0x2
  36. #define SPI_FCTRL_EN 0x1
  37. #define SPI_INSN_CMD_EN 0x1
  38. #define SPI_INSN_ADDR_LEN(x) (((x) & 0x7) << 1)
  39. #define SPI_INSN_PAD_CNT(x) (((x) & 0xf) << 4)
  40. #define SPI_INSN_CMD_PROTO(x) (((x) & 0x3) << 8)
  41. #define SPI_INSN_ADDR_PROTO(x) (((x) & 0x3) << 10)
  42. #define SPI_INSN_DATA_PROTO(x) (((x) & 0x3) << 12)
  43. #define SPI_INSN_CMD_CODE(x) (((x) & 0xff) << 16)
  44. #define SPI_INSN_PAD_CODE(x) (((x) & 0xff) << 24)
  45. #define SPI_TXFIFO_FULL (1 << 31)
  46. #define SPI_RXFIFO_EMPTY (1 << 31)
  47. /* Values */
  48. #define SPI_CSMODE_AUTO 0
  49. #define SPI_CSMODE_HOLD 2
  50. #define SPI_CSMODE_OFF 3
  51. #define SPI_DIR_RX 0
  52. #define SPI_DIR_TX 1
  53. #define SPI_PROTO_S 0
  54. #define SPI_PROTO_D 1
  55. #define SPI_PROTO_Q 2
  56. #define SPI_ENDIAN_MSB 0
  57. #define SPI_ENDIAN_LSB 1
  58. #endif /* _SIFIVE_SPI_H */