driver_spi.h 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. /*
  2. * @File name : driver_spi.h
  3. * @Author : Bluetrum IOT Team
  4. * @Date : 2023-02-15
  5. * @Description : This file contains all the functions prototypes for the SPI library.
  6. *
  7. * Copyright (c) by Bluetrum, All Rights Reserved.
  8. */
  9. #ifndef _DRIVER_SPI_H
  10. #define _DRIVER_SPI_H
  11. #include "driver_com.h"
  12. //--------------- SPI[0..1] Flag Definition ---------------//
  13. #define SPI_FLAG_PENDING ((uint32_t)0x00010000)
  14. /**
  15. * @brief SPI Role Mode Enumeration
  16. */
  17. typedef enum {
  18. SPI_ROLE_MODE_MASTER = 0x00000000,
  19. SPI_ROLE_MODE_SLAVE = 0x00000002,
  20. } SPI_ROLE_MODE_TYPEDEF;
  21. /**
  22. * @brief SPI Bus Mode Enumeration
  23. */
  24. typedef enum {
  25. SPI_3WIRE_MODE = 0x00000000,
  26. SPI_2WIRE_MODE = 0x00000004,
  27. SPI_2BIT_BID_MODE = 0x00000008,
  28. SPI_4BIT_BID_MODE = 0x0000000c,
  29. } SPI_BUS_MODE_TYPEDEF;
  30. /**
  31. * @brief SPI Output Data Edge Enumeration
  32. */
  33. typedef enum {
  34. SPI_OUTPUT_DATA_EDGE_FALLING = 0x00000000,
  35. SPI_OUTPUT_DATA_EDGE_RISING = 0x00000040,
  36. } SPI_OUTPUT_DATA_EDGE_TYPEDEF;
  37. /**
  38. * @brief SPI Sample Clock Enumeration
  39. */
  40. typedef enum {
  41. SPI_SAMPLE_AND_OUTPUT_CLOCK_DIFF = 0x00000000,
  42. SPI_SAMPLE_AND_OUTPUT_CLOCK_SAME = 0x00000400,
  43. } SPI_SAMPLE_AND_OUTPUT_CLOCK_TYPEDEF;
  44. /**
  45. * @brief SPI Direction
  46. */
  47. typedef enum {
  48. SPI_DIR_TX = 0x00,
  49. SPI_DIR_RX = 0x01,
  50. } SPI_DIR_TYPEDEF;
  51. /**
  52. * @brief SPI Clock State When Idle
  53. */
  54. typedef enum {
  55. SPI_CLOCK_IDLE_LOW = 0x00000000,
  56. SPI_CLOCK_IDLE_HIGH = 0x00000020,
  57. } SPI_CLOCK_IDLE_STATE_TYPEDEF;
  58. /* SPI Init Structure */
  59. typedef struct{
  60. uint32_t baud;
  61. SPI_ROLE_MODE_TYPEDEF role_mode;
  62. SPI_BUS_MODE_TYPEDEF bus_mode;
  63. SPI_OUTPUT_DATA_EDGE_TYPEDEF output_data_edge;
  64. SPI_SAMPLE_AND_OUTPUT_CLOCK_TYPEDEF sample_clk_edge;
  65. SPI_CLOCK_IDLE_STATE_TYPEDEF clkids; //if SPI1BAUD is equal to 0, then CLKIDS forces 0 by designed
  66. } spi_init_typedef;
  67. void spi_init(spi_typedef* spix, spi_init_typedef* spi_init_struct);
  68. void spi_deinit(spi_typedef* spix);
  69. void spi_cmd(spi_typedef* spix, FUNCTIONAL_STATE state);
  70. void spi_dir_sel(spi_typedef* spix, SPI_DIR_TYPEDEF direction);
  71. void spi_it_cmd(spi_typedef* spix, FUNCTIONAL_STATE state);
  72. void spi_lfsr_cmd(spi_typedef* spix, FUNCTIONAL_STATE state);
  73. void spi_multi_bit_bus_cmd(spi_typedef* spix, FUNCTIONAL_STATE state);
  74. void spi_hold_rx_cmd(spi_typedef* spix, FUNCTIONAL_STATE state);
  75. void spi_hold_tx_cmd(spi_typedef* spix, FUNCTIONAL_STATE state);
  76. void spi_soft_hold_cmd(spi_typedef* spix, FUNCTIONAL_STATE state);
  77. FLAG_STATE spi_get_flag(spi_typedef* spix, uint32_t spi_flag);
  78. void spi_clear_flag(spi_typedef* spix, uint32_t spi_flag);
  79. void spi_set_dma_cnt(spi_typedef* spix, uint32_t cnt);
  80. void spi_set_dma_addr(spi_typedef* spix, uint32_t addr);
  81. uint8_t spi_receive_data(spi_typedef* spix);
  82. void spi_send_data(spi_typedef* spix, uint8_t data);
  83. #endif // _DRIVER_SPI_H