drv_spi.h 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. /*
  2. * Copyright (c) 2006-2023, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2021-01-13 Lyons first version
  9. * 2021-06-23 RiceChen refactor
  10. */
  11. #ifndef __DRV_SPI_H__
  12. #define __DRV_SPI_H__
  13. #include <board.h>
  14. #include "drv_common.h"
  15. #include "fsl_iomuxc.h"
  16. #include "fsl_clock.h"
  17. #include "fsl_ecspi.h"
  18. struct imx6ull_spi_cs
  19. {
  20. rt_uint32_t pin;
  21. };
  22. struct imx6ull_spi_config
  23. {
  24. ECSPI_Type *ECSPI;
  25. char *name;
  26. rt_uint32_t clk_ip_name;
  27. struct imx6ull_iomuxc clk_gpio;
  28. struct imx6ull_iomuxc miso_gpio;
  29. struct imx6ull_iomuxc mosi_gpio;
  30. };
  31. struct imx6ull_spi_bus
  32. {
  33. struct rt_spi_bus parent;
  34. struct imx6ull_spi_config *config;
  35. };
  36. #ifdef BSP_USING_SPI1
  37. #define SPI1_BUS_CONFIG \
  38. { \
  39. .ECSPI = ECSPI1, \
  40. .name = "spi1", \
  41. .clk_ip_name = kCLOCK_Ecspi1, \
  42. .clk_gpio = {IOMUXC_CSI_DATA04_ECSPI1_SCLK, 0, 0X10B1}, \
  43. .miso_gpio = {IOMUXC_CSI_DATA07_ECSPI1_MISO, 0, 0X10B1}, \
  44. .mosi_gpio = {IOMUXC_CSI_DATA06_ECSPI1_MOSI, 0, 0X10B1}, \
  45. }
  46. #endif /* BSP_USING_SPI1 */
  47. #ifdef BSP_USING_SPI2
  48. #define SPI2_BUS_CONFIG \
  49. { \
  50. .ECSPI = ECSPI2, \
  51. .name = "spi2", \
  52. .clk_ip_name = kCLOCK_Ecspi2, \
  53. .clk_gpio = {IOMUXC_UART4_TX_DATA_ECSPI2_SCLK, 0, 0X10B1}, \
  54. .miso_gpio = {IOMUXC_UART5_RX_DATA_ECSPI2_MISO, 0, 0X10B1}, \
  55. .mosi_gpio = {IOMUXC_UART5_TX_DATA_ECSPI2_MOSI, 0, 0X10B1}, \
  56. }
  57. #endif /* BSP_USING_SPI2 */
  58. #ifdef BSP_USING_SPI3
  59. #define SPI3_BUS_CONFIG \
  60. { \
  61. .ECSPI = ECSPI3, \
  62. .name = "spi3", \
  63. .clk_ip_name = kCLOCK_Ecspi3, \
  64. .clk_gpio = {IOMUXC_UART2_RX_DATA_ECSPI3_SCLK, 0, 0X10B1}, \
  65. .miso_gpio = {IOMUXC_UART2_RTS_B_ECSPI3_MISO, 0, 0X10B1}, \
  66. .mosi_gpio = {IOMUXC_UART2_CTS_B_ECSPI3_MOSI, 0, 0X10B1}, \
  67. }
  68. #endif /* BSP_USING_SPI3 */
  69. #ifdef BSP_USING_SPI4
  70. #define SPI4_BUS_CONFIG \
  71. { \
  72. .ECSPI = ECSPI4, \
  73. .name = "spi4", \
  74. .clk_ip_name = kCLOCK_Ecspi4, \
  75. .clk_gpio = {IOMUXC_ENET2_TX_DATA1_ECSPI4_SCLK, 0, 0X10B1}, \
  76. .miso_gpio = {IOMUXC_ENET2_TX_CLK_ECSPI4_MISO, 0, 0X10B1}, \
  77. .mosi_gpio = {IOMUXC_ENET2_TX_EN_ECSPI4_MOSI, 0, 0X10B1}, \
  78. }
  79. #endif /* BSP_USING_SPI4 */
  80. rt_err_t rt_hw_spi_device_attach(const char *bus_name, const char *device_name, rt_uint32_t pin);
  81. #endif