api-hal-spi-config.c 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  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_8,
  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. /**
  51. * SD Card in fast mode (after init)
  52. */
  53. const SPI_InitTypeDef api_hal_spi_config_sd_fast = {
  54. .Mode = SPI_MODE_MASTER,
  55. .Direction = SPI_DIRECTION_2LINES,
  56. .DataSize = SPI_DATASIZE_8BIT,
  57. .CLKPolarity = SPI_POLARITY_LOW,
  58. .CLKPhase = SPI_PHASE_1EDGE,
  59. .NSS = SPI_NSS_SOFT,
  60. .BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2,
  61. .FirstBit = SPI_FIRSTBIT_MSB,
  62. .TIMode = SPI_TIMODE_DISABLE,
  63. .CRCCalculation = SPI_CRCCALCULATION_DISABLE,
  64. .CRCPolynomial = 7,
  65. .CRCLength = SPI_CRC_LENGTH_DATASIZE,
  66. .NSSPMode = SPI_NSS_PULSE_ENABLE,
  67. };
  68. /**
  69. * SD Card in slow mode (before init)
  70. */
  71. const SPI_InitTypeDef api_hal_spi_config_sd_slow = {
  72. .Mode = SPI_MODE_MASTER,
  73. .Direction = SPI_DIRECTION_2LINES,
  74. .DataSize = SPI_DATASIZE_8BIT,
  75. .CLKPolarity = SPI_POLARITY_LOW,
  76. .CLKPhase = SPI_PHASE_1EDGE,
  77. .NSS = SPI_NSS_SOFT,
  78. .BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32,
  79. .FirstBit = SPI_FIRSTBIT_MSB,
  80. .TIMode = SPI_TIMODE_DISABLE,
  81. .CRCCalculation = SPI_CRCCALCULATION_DISABLE,
  82. .CRCPolynomial = 7,
  83. .CRCLength = SPI_CRC_LENGTH_DATASIZE,
  84. .NSSPMode = SPI_NSS_PULSE_ENABLE,
  85. };
  86. osMutexId_t spi_mutex_d = NULL;
  87. osMutexId_t spi_mutex_r = NULL;
  88. const ApiHalSpiBus spi_r = {
  89. .spi=&SPI_R,
  90. .mutex=&spi_mutex_r,
  91. .miso=&gpio_spi_r_miso,
  92. .mosi=&gpio_spi_r_mosi,
  93. .clk=&gpio_spi_r_sck,
  94. };
  95. const ApiHalSpiBus spi_d = {
  96. .spi=&SPI_D,
  97. .mutex=&spi_mutex_d,
  98. .miso=&gpio_spi_d_miso,
  99. .mosi=&gpio_spi_d_mosi,
  100. .clk=&gpio_spi_d_sck,
  101. };
  102. const ApiHalSpiDevice api_hal_spi_devices[ApiHalSpiDeviceIdMax] = {
  103. { .bus=&spi_r, .config=&api_hal_spi_config_subghz, .chip_select=&gpio_subghz_cs, },
  104. { .bus=&spi_d, .config=&api_hal_spi_config_display, .chip_select=&gpio_display_cs, },
  105. { .bus=&spi_d, .config=&api_hal_spi_config_sd_fast, .chip_select=&gpio_sdcard_cs, },
  106. { .bus=&spi_d, .config=&api_hal_spi_config_sd_slow, .chip_select=&gpio_sdcard_cs, },
  107. { .bus=&spi_r, .config=&api_hal_spi_config_nfc, .chip_select=&gpio_nfc_cs },
  108. };