api-hal-spi-config.c 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. #include <api-hal-spi-config.h>
  2. #include <api-hal-resources.h>
  3. extern SPI_HandleTypeDef SPI_R;
  4. extern SPI_HandleTypeDef SPI_D;
  5. const SPI_InitTypeDef api_hal_spi_config_nfc = {
  6. .Mode = SPI_MODE_MASTER,
  7. .Direction = SPI_DIRECTION_2LINES,
  8. .DataSize = SPI_DATASIZE_8BIT,
  9. .CLKPolarity = SPI_POLARITY_LOW,
  10. .CLKPhase = SPI_PHASE_2EDGE,
  11. .NSS = SPI_NSS_SOFT,
  12. .BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8,
  13. .FirstBit = SPI_FIRSTBIT_MSB,
  14. .TIMode = SPI_TIMODE_DISABLE,
  15. .CRCCalculation = SPI_CRCCALCULATION_DISABLE,
  16. .CRCPolynomial = 7,
  17. .CRCLength = SPI_CRC_LENGTH_DATASIZE,
  18. .NSSPMode = SPI_NSS_PULSE_DISABLE,
  19. };
  20. const SPI_InitTypeDef api_hal_spi_config_subghz = {
  21. .Mode = SPI_MODE_MASTER,
  22. .Direction = SPI_DIRECTION_2LINES,
  23. .DataSize = SPI_DATASIZE_8BIT,
  24. .CLKPolarity = SPI_POLARITY_LOW,
  25. .CLKPhase = SPI_PHASE_1EDGE,
  26. .NSS = SPI_NSS_SOFT,
  27. .BaudRatePrescaler = SPI_BAUDRATEPRESCALER_64,
  28. .FirstBit = SPI_FIRSTBIT_MSB,
  29. .TIMode = SPI_TIMODE_DISABLE,
  30. .CRCCalculation = SPI_CRCCALCULATION_DISABLE,
  31. .CRCPolynomial = 7,
  32. .CRCLength = SPI_CRC_LENGTH_DATASIZE,
  33. .NSSPMode = SPI_NSS_PULSE_DISABLE,
  34. };
  35. const SPI_InitTypeDef api_hal_spi_config_display = {
  36. .Mode = SPI_MODE_MASTER,
  37. .Direction = SPI_DIRECTION_2LINES,
  38. .DataSize = SPI_DATASIZE_8BIT,
  39. .CLKPolarity = SPI_POLARITY_LOW,
  40. .CLKPhase = SPI_PHASE_1EDGE,
  41. .NSS = SPI_NSS_SOFT,
  42. .BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16,
  43. .FirstBit = SPI_FIRSTBIT_MSB,
  44. .TIMode = SPI_TIMODE_DISABLE,
  45. .CRCCalculation = SPI_CRCCALCULATION_DISABLE,
  46. .CRCPolynomial = 7,
  47. .CRCLength = SPI_CRC_LENGTH_DATASIZE,
  48. .NSSPMode = SPI_NSS_PULSE_ENABLE,
  49. };
  50. osMutexId_t spi_mutex_d = NULL;
  51. osMutexId_t spi_mutex_r = NULL;
  52. const ApiHalSpiBus spi_r = {
  53. .spi=&SPI_R,
  54. .mutex=&spi_mutex_r,
  55. .miso=&gpio_spi_r_miso,
  56. .mosi=&gpio_spi_r_mosi,
  57. .clk=&gpio_spi_r_sck,
  58. };
  59. const ApiHalSpiBus spi_d = {
  60. .spi=&SPI_D,
  61. .mutex=&spi_mutex_d,
  62. .miso=&gpio_spi_d_miso,
  63. .mosi=&gpio_spi_d_mosi,
  64. .clk=&gpio_spi_d_sck,
  65. };
  66. const ApiHalSpiDevice api_hal_spi_devices[ApiHalSpiDeviceIdMax] = {
  67. { .bus=&spi_r, .config=&api_hal_spi_config_subghz, .chip_select=&gpio_subghz_cs, },
  68. { .bus=&spi_d, .config=&api_hal_spi_config_display, .chip_select=&gpio_display_cs, },
  69. { .bus=&spi_d, .config=NULL, .chip_select=&gpio_sdcard_cs, },
  70. { .bus=&spi_r, .config=&api_hal_spi_config_nfc, .chip_select=&gpio_nfc_cs },
  71. };
  72. /**
  73. * SD Card in fast mode (after init)
  74. */
  75. const SPIDevice sd_fast_spi = {
  76. .bus= &spi_d,
  77. .config = {
  78. .Mode = SPI_MODE_MASTER,
  79. .Direction = SPI_DIRECTION_2LINES,
  80. .DataSize = SPI_DATASIZE_8BIT,
  81. .CLKPolarity = SPI_POLARITY_LOW,
  82. .CLKPhase = SPI_PHASE_1EDGE,
  83. .NSS = SPI_NSS_SOFT,
  84. .BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2,
  85. .FirstBit = SPI_FIRSTBIT_MSB,
  86. .TIMode = SPI_TIMODE_DISABLE,
  87. .CRCCalculation = SPI_CRCCALCULATION_DISABLE,
  88. .CRCPolynomial = 7,
  89. .CRCLength = SPI_CRC_LENGTH_DATASIZE,
  90. .NSSPMode = SPI_NSS_PULSE_ENABLE,
  91. }};
  92. /**
  93. * SD Card in slow mode (before init)
  94. */
  95. const SPIDevice sd_slow_spi = {
  96. .bus= &spi_d,
  97. .config = {
  98. .Mode = SPI_MODE_MASTER,
  99. .Direction = SPI_DIRECTION_2LINES,
  100. .DataSize = SPI_DATASIZE_8BIT,
  101. .CLKPolarity = SPI_POLARITY_LOW,
  102. .CLKPhase = SPI_PHASE_1EDGE,
  103. .NSS = SPI_NSS_SOFT,
  104. .BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32,
  105. .FirstBit = SPI_FIRSTBIT_MSB,
  106. .TIMode = SPI_TIMODE_DISABLE,
  107. .CRCCalculation = SPI_CRCCALCULATION_DISABLE,
  108. .CRCPolynomial = 7,
  109. .CRCLength = SPI_CRC_LENGTH_DATASIZE,
  110. .NSSPMode = SPI_NSS_PULSE_ENABLE,
  111. }};