My Marlin configs for Fabrikator Mini and CTC i3 Pro B
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

MarlinSPI.h 3.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. /**
  2. * Marlin 3D Printer Firmware
  3. * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
  4. *
  5. * Based on Sprinter and grbl.
  6. * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
  7. *
  8. * This program is free software: you can redistribute it and/or modify
  9. * it under the terms of the GNU General Public License as published by
  10. * the Free Software Foundation, either version 3 of the License, or
  11. * (at your option) any later version.
  12. *
  13. * This program is distributed in the hope that it will be useful,
  14. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  16. * GNU General Public License for more details.
  17. *
  18. * You should have received a copy of the GNU General Public License
  19. * along with this program. If not, see <https://www.gnu.org/licenses/>.
  20. *
  21. */
  22. #pragma once
  23. #include "HAL.h"
  24. #include <SPI.h>
  25. extern "C" {
  26. #include <utility/spi_com.h>
  27. }
  28. /**
  29. * Marlin currently requires 3 SPI classes:
  30. *
  31. * SPIClass:
  32. * This class is normally provided by frameworks and has a semi-default interface.
  33. * This is needed because some libraries reference it globally.
  34. *
  35. * SPISettings:
  36. * Container for SPI configs for SPIClass. As above, libraries may reference it globally.
  37. *
  38. * These two classes are often provided by frameworks so we cannot extend them to add
  39. * useful methods for Marlin.
  40. *
  41. * MarlinSPI:
  42. * Provides the default SPIClass interface plus some Marlin goodies such as a simplified
  43. * interface for SPI DMA transfer.
  44. *
  45. */
  46. #define DATA_SIZE_8BIT SPI_DATASIZE_8BIT
  47. #define DATA_SIZE_16BIT SPI_DATASIZE_16BIT
  48. class MarlinSPI {
  49. public:
  50. MarlinSPI() : MarlinSPI(NC, NC, NC, NC) {}
  51. MarlinSPI(pin_t mosi, pin_t miso, pin_t sclk, pin_t ssel = (pin_t)NC) : _mosiPin(mosi), _misoPin(miso), _sckPin(sclk), _ssPin(ssel) {
  52. _spi.pin_miso = digitalPinToPinName(_misoPin);
  53. _spi.pin_mosi = digitalPinToPinName(_mosiPin);
  54. _spi.pin_sclk = digitalPinToPinName(_sckPin);
  55. _spi.pin_ssel = digitalPinToPinName(_ssPin);
  56. _dataSize = DATA_SIZE_8BIT;
  57. _bitOrder = MSBFIRST;
  58. _dataMode = SPI_MODE_0;
  59. _spi.handle.State = HAL_SPI_STATE_RESET;
  60. setClockDivider(SPI_SPEED_CLOCK_DIV2_MHZ);
  61. }
  62. void begin(void);
  63. void end(void) {}
  64. byte transfer(uint8_t _data);
  65. uint8_t dmaTransfer(const void *transmitBuf, void *receiveBuf, uint16_t length);
  66. uint8_t dmaSend(const void * transmitBuf, uint16_t length, bool minc = true);
  67. /* These methods are deprecated and kept for compatibility.
  68. * Use SPISettings with SPI.beginTransaction() to configure SPI parameters.
  69. */
  70. void setBitOrder(BitOrder _order) { _bitOrder = _order; }
  71. void setDataMode(uint8_t _mode) {
  72. switch (_mode) {
  73. case SPI_MODE0: _dataMode = SPI_MODE_0; break;
  74. case SPI_MODE1: _dataMode = SPI_MODE_1; break;
  75. case SPI_MODE2: _dataMode = SPI_MODE_2; break;
  76. case SPI_MODE3: _dataMode = SPI_MODE_3; break;
  77. }
  78. }
  79. void setClockDivider(uint8_t _div);
  80. private:
  81. void setupDma(SPI_HandleTypeDef &_spiHandle, DMA_HandleTypeDef &_dmaHandle, uint32_t direction, bool minc = false);
  82. spi_t _spi;
  83. DMA_HandleTypeDef _dmaTx;
  84. DMA_HandleTypeDef _dmaRx;
  85. BitOrder _bitOrder;
  86. spi_mode_e _dataMode;
  87. uint8_t _clockDivider;
  88. uint32_t _speed;
  89. uint32_t _dataSize;
  90. pin_t _mosiPin;
  91. pin_t _misoPin;
  92. pin_t _sckPin;
  93. pin_t _ssPin;
  94. };