SPI API

概要

SPI API は、同期転送と DMA 転送の両方を提供します。 複数タスクから利用する場合は lock() / unlock() でトランザクションを保護します。

xmc::spi::getPreferredFrequency

uint32_t xmc::spi::getPreferredFrequency(Chipset device);

デバイス種別に応じた推奨 SPI クロック [Hz] を返します。

device には接続先デバイス種別を指定します。 戻り値は、そのデバイスでの使用を想定した推奨 SPI クロックです。

初期化

xmc::spi::init

XmcStatus xmc::spi::init();

SPI ペリフェラルを初期化します。

SPI API を利用する前に呼び出します。 戻り値は XmcStatus で、成功時は XMC_OK です。

xmc::spi::deinit

void xmc::spi::deinit();

SPI ペリフェラルを終了します。

以後 SPI を使用しない場合に呼び出します。戻り値はありません。

トランザクション制御

xmc::spi::tryLock

bool xmc::spi::tryLock();

非ブロッキングで SPI ロック取得を試みます。

取得成功時は true、取得失敗時は false を返します。

xmc::spi::lock

XmcStatus xmc::spi::lock();

ロックが取得できるまで待機してから SPI トランザクションを開始します。

戻り値は XmcStatus です。通常は XMC_OK が返ります。

xmc::spi::unlock

XmcStatus xmc::spi::unlock();

SPI トランザクションを終了します。

戻り値は XmcStatus です。

通信設定

xmc::spi::setBaudrate

XmcStatus xmc::spi::setBaudrate(uint32_t baudrate);

SPI 通信速度 [Hz] を設定します。

baudrate には希望するクロック周波数を指定します。 戻り値は XmcStatus です。

同期転送

xmc::spi::writeBlocking

XmcStatus xmc::spi::writeBlocking(const uint8_t *data, uint32_t size);

SPI へブロッキング書き込みを行います。

data は送信バッファ先頭、size は送信バイト数です。 戻り値は XmcStatus です。

xmc::spi::readBlocking

XmcStatus xmc::spi::readBlocking(uint8_t repeated_byte, uint8_t *data, uint32_t size);

読み出し中に repeated_byte を送信しながら、size バイト受信します。

data は受信バッファ先頭、size は受信バイト数です。 戻り値は XmcStatus です。

DMA 転送

xmc::spi::dmaWriteStart

XmcStatus xmc::spi::dmaWriteStart(const xmc::dma::Config *cfg, int csPin);

DMA 書き込みを開始します。関数は転送完了を待たずに返ります。

cfg の主なメンバー:

  • ptr: 転送元バッファ

  • elementSize: 要素サイズ [byte]

  • length: 要素数

csPin に 0 以上を指定すると、転送中のみ CS を自動制御します。

戻り値は XmcStatus です。転送開始に成功した時点で返るため、完了確認には dmaComplete() または dmaIsBusy() を使用します。

xmc::spi::dmaComplete

XmcStatus xmc::spi::dmaComplete();

進行中 DMA 転送の完了を待機します。

戻り値は XmcStatus です。DMA 転送と必要な CS 解放処理が完了した時点で返ります。

xmc::spi::dmaIsBusy

bool xmc::spi::dmaIsBusy();

DMA 転送中かどうかを返します。

転送中は true、アイドル状態では false を返します。