hpm_spi.h 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. /*
  2. * Copyright (c) 2022 hpmicro
  3. *
  4. * SPDX-License-Identifier: BSD-3-Clause
  5. *
  6. */
  7. #ifndef HPM_COMPONENT_SPI_H
  8. #define HPM_COMPONENT_SPI_H
  9. #include "hpm_common.h"
  10. #include "hpm_spi_drv.h"
  11. #include "hpm_dma_drv.h"
  12. #include "hpm_dmamux_drv.h"
  13. #include "hpm_misc.h"
  14. #include "hpm_l1c_drv.h"
  15. #ifndef SPI_CS_ACTIVE
  16. #define SPI_CS_ACTIVE 0
  17. #endif
  18. /* Every transaction can be delineated by 3 dma descriptions: SPI control, SPI cmd, SPI data */
  19. #define SPI_DMA_DESC_COUNT_PER_TRANS (3U)
  20. typedef struct {
  21. DMA_Type *dma_ptr;
  22. DMAMUX_Type *dmamux_ptr;
  23. uint8_t rx_dma_ch;
  24. uint8_t tx_dma_ch;
  25. uint8_t rx_dmamux_ch;
  26. uint8_t tx_dmamux_ch;
  27. uint8_t rx_req;
  28. uint8_t tx_req;
  29. } spi_dma_context_t;
  30. typedef struct {
  31. SPI_Type *ptr;
  32. uint32_t cs_pin;
  33. uint8_t cmd;
  34. uint8_t *rx_buff;
  35. uint8_t *tx_buff;
  36. uint8_t running_core;
  37. uint32_t addr;
  38. uint32_t rx_size;
  39. uint32_t tx_size;
  40. uint32_t per_trans_max;
  41. uint32_t *spi_transctrl;
  42. void (*write_cs)(uint32_t cs_pin, uint8_t state);
  43. spi_dma_context_t dma_context;
  44. dma_linked_descriptor_t *dma_linked_descriptor;
  45. } spi_context_t;
  46. #ifdef __cplusplus
  47. extern "C" {
  48. #endif
  49. /**
  50. * @brief hpm_spi setup dma transfer
  51. *
  52. * @param[in] spi_context A pointer to the struct of "spi_context_t"
  53. * @param[in] spi_config A pointer to the struct of "spi_control_config_t"
  54. * @retval status_success if SPI transfers data successfully.
  55. */
  56. hpm_stat_t hpm_spi_setup_dma_transfer(spi_context_t *context, spi_control_config_t *config);
  57. /*
  58. * SPI release gpio pin if gpio use for SPI CS function
  59. */
  60. /**
  61. * @brief hpm_spi releases gpio cs pin after SPI transfer completed
  62. *
  63. * @param[in] spi_context A pointer to the struct of "spi_context_t"
  64. * @retval status_success if SPI releases gpio cs pin successfully.
  65. */
  66. hpm_stat_t hpm_spi_release_gpio_cs(spi_context_t *context);
  67. #ifdef __cplusplus
  68. }
  69. #endif
  70. #endif /* HPM_COMPONENT_SPI_H */