# SPI

SPIバス (MASTER) の読み書きを行います。

## 注意事項

## 定数

| 定数                                                                       | 意味               |
| ------------------------------------------------------------------------ | ---------------- |
| <p><code>const uint8\_t</code><br><code>SPI\_CONF::MSBFIRST</code></p>   | MSB を先頭ビットにする    |
| <p><code>const uint8\_t</code><br><code>SPI\_CONF::LSBFIRST</code></p>   | LSB を先頭ビットにする    |
| <p><code>const uint8\_t</code><br><code>SPI\_CONF::SPI\_MODE0</code></p> | SPI MODE 0 に設定する |
| <p><code>const uint8\_t</code><br><code>SPI\_CONF::SPI\_MODE1</code></p> | SPI MODE 1 に設定する |
| <p><code>const uint8\_t</code><br><code>SPI\_CONF::SPI\_MODE2</code></p> | SPI MODE 2 に設定する |
| <p><code>const uint8\_t</code><br><code>SPI\_CONF::SPI\_MODE3</code></p> | SPI MODE 3 に設定する |

## 初期化と終了

SPIバスの利用手続きは`begin()`メソッドによります。

### begin()

```cpp
void begin(uint8_t slave_select, SPISettings settings)
SPISettings(uint32_t clock, uint8_t bitOrder, uint8_t dataMode)
```

ハードウェアの初期化を行います。

{% hint style="warning" %}
スリープ復帰後にも本処理が必須です。
{% endhint %}

| パラメータ          | 解説                                                                                                                                                                                                                                                                                                           |
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `slave_select` | <p>使用するSPIスレーブのセレクトピンを指定する。</p><p><code>0 : DIO19</code></p><p><code>1 : DIO0 (DIO 19 は予約されます)</code></p><p><code>2 : DIO1 (DIO 0,19 は予約されます)</code></p>                                                                                                                                                     |
| `settings`     | <p>SPIのバス設定を指定します。<br><br><code>clock</code>\[hz]でSPIバスの周波数を指定します。指定した周波数に近いディバイザが選択されます。16Mhzまたは16Mhzを偶数で割った値になります。<br></p><p><code>bitOrder</code>は<code>SPI\_CONF::MSBFIRST</code>か<code>SPI\_CONF::LSBFIRST</code>を指定します。<br></p><p><code>dataMode</code>は<code>SPI\_CONF::SPIMODE0..3</code>を指定します。</p> |

###

#### 例

```cpp
void setup() {
  ...
  SPI.begin(0, SPISettings(2000000, SPI_CONF::MSBFIRST, SPI_CONF::SPI_MODE3));
  ...
}

void wakeip() {
  ...
  SPI.begin(0, SPISettings(2000000, SPI_CONF::MSBFIRST, SPI_CONF::SPI_MODE3));
  ...
}
```

### end()

```cpp
void end()
```

SPIのハードウェアの利用を終了します。

## 読み書き

読み書きの手続きは、以下の2種類あります。いずれかを選択して利用します。

* [メンバ関数版 (以下のメンバ関数を用いた入出力)](https://mwx.twelite.info/v0.1.5/api-reference/predefined_objs/spi/spi-member)\
  `beginTransaction(), endTransaction(), transfer(), transfer16(), transfer32()`
* [ヘルパークラス版(stream機能が使用可能)](https://mwx.twelite.info/v0.1.5/api-reference/predefined_objs/spi/spi-helperclass)\
  `transceiver`

####
