C2A_Core
spi.h ファイル

SPI通信(Master側)のラッパークラスです。 [詳解]

#include <stdint.h>
spi.h の依存先関係図:

[ソースコード]

データ構造

struct  SPI_Config
 SPIポートの初期化、データ送信・受信の際に必要となる設定情報を格納する構造体です。 [詳解]
 

列挙型

enum  SPI_MODE { SPI_MODE_0 = 0 , SPI_MODE_1 = 1 , SPI_MODE_2 = 2 , SPI_MODE_3 = 3 }
 SPI動作モードの設定 [詳解]
 
enum  SPI_CS_STATE_AFTER_TX { SPI_CS_STATE_AFTER_TX_HIGH = 0 , SPI_CS_STATE_AFTER_TX_LOW = 1 }
 
enum  SPI_ERR_CODE {
  SPI_ERR_UNKNOWN = -20 , SPI_ERR_RX_BUFFER_SMALL = -14 , SPI_ERR_DATA_NEGA = -13 , SPI_ERR_DATA_LARGE = -12 ,
  SPI_ERR_GPIO = -5 , SPI_ERR_YET = -4 , SPI_ERR_ALREADY = -3 , SPI_ERR_FREQUENCY = -2 ,
  SPI_ERR_CH = -1 , SPI_ERR_OK = 0
}
 SPI用の汎用エラーコード [詳解]
 

関数

int SPI_init (void *my_spi_v)
 SPI_Config構造体をグローバルインスタンスとして定義し、ポインタを渡すことでポートを初期化します。 [詳解]
 
int SPI_rx (void *my_spi_v, void *data_v, int buffer_size)
 SPI_Config構造体にて指定されたchからデータを受信します [詳解]
 
int SPI_tx (void *my_spi_v, void *data_v, int data_size)
 SPI_Config構造体にて指定されたchへデータを送信します [詳解]
 
int SPI_reopen (void *my_spi_v, int reason)
 指定されたchを開きなおす [詳解]
 
void SPI_set_rx_length (void *my_spi_v, const uint16_t rx_length)
 rx_lengthを設定する [詳解]
 
void SPI_set_cs_state_after_tx (void *my_spi_v, const SPI_CS_STATE_AFTER_TX cs_state_after_tx)
 cs_state_after_txを設定する [詳解]
 

詳解

SPI通信(Master側)のラッパークラスです。

覚え書き
SPI通信ラッパーは、 SPIのインターフェースを実現し、 SPIポートの初期化、データ送信、データ受信を行う、 SPI通信ラッパーのクラスです。 個々の機器のインターフェースモジュールに継承させて使用します。

spi.h に定義があります。

列挙型詳解

◆ SPI_CS_STATE_AFTER_TX

列挙値
SPI_CS_STATE_AFTER_TX_HIGH 

送信後にCSをHighにする

SPI_CS_STATE_AFTER_TX_LOW 

送信後にCSをLowのままにし、そのまま受信動作などを行う

spi.h33 行目に定義があります。

◆ SPI_ERR_CODE

SPI用の汎用エラーコード

覚え書き
型はint8_tを想定しているが, if_listでラップされているためSPIの公開関数の返り値はintとなっている 基本負なのはRXの返り値は正が送ったByte数, 負がエラーコードとなっているため
列挙値
SPI_ERR_UNKNOWN 

原因不明

SPI_ERR_RX_BUFFER_SMALL 

受信バッファサイズが受信データ長より小さい

SPI_ERR_DATA_NEGA 

送受信データサイズが負のエラー

SPI_ERR_DATA_LARGE 

送受信データサイズが大きすぎる

SPI_ERR_GPIO 

GPIO関連エラー

SPI_ERR_YET 

チャンネル未オープン

SPI_ERR_ALREADY 

チャンネルオープン済み

SPI_ERR_FREQUENCY 

周波数異常

SPI_ERR_CH 

チャンネル異常 (Port_configに無い)

SPI_ERR_OK 

OKは0を踏襲

spi.h60 行目に定義があります。

◆ SPI_MODE

enum SPI_MODE

SPI動作モードの設定

覚え書き
型はuint8_tを想定
列挙値
SPI_MODE_0 

CPOL=0, CPHA = 0

SPI_MODE_1 

CPOL=0, CPHA = 1

SPI_MODE_2 

CPOL=1, CPHA = 0

SPI_MODE_3 

CPOL=1, CPHA = 1

spi.h20 行目に定義があります。

関数詳解

◆ SPI_init()

int SPI_init ( void *  my_spi_v)

SPI_Config構造体をグローバルインスタンスとして定義し、ポインタを渡すことでポートを初期化します。

引数
[in]my_spi_v初期化するSPI_Config構造体へのポインタ
戻り値
int SPI_ERR_CODEとしたいが, if_listでintと統一されている。
覚え書き
SPI通信ラッパーのクラスを使用する時は起動時に必ず実施してください。 この関数を実行する前にSPI_Config構造体内の設定値を設定しておく必要があります。

◆ SPI_reopen()

int SPI_reopen ( void *  my_spi_v,
int  reason 
)

指定されたchを開きなおす

引数
[in]my_spi_v開きなおす際のポート設定
[in]reasonreopenする理由.0は正常操作を示す TODO: reasonのenumを作る?
戻り値
int: SPI_ERR_CODE に従う

◆ SPI_rx()

int SPI_rx ( void *  my_spi_v,
void *  data_v,
int  buffer_size 
)

SPI_Config構造体にて指定されたchからデータを受信します

引数
[in]my_spi_v: 対象とするSPI_Config構造体へのポインタ
[in]data_v: 受信データ格納先へのポインタ
[in]buffer_size: 受信データ格納先のバッファサイズ、SPI通信による受信データ長よりも長い必要がある
戻り値
0受信データなし
受信データバイト数
エラー. SPI_ERR_CODE に従う
覚え書き
この関数内でSPI読み出し要求を送信しています

◆ SPI_set_cs_state_after_tx()

void SPI_set_cs_state_after_tx ( void *  my_spi_v,
const SPI_CS_STATE_AFTER_TX  cs_state_after_tx 
)

cs_state_after_txを設定する

引数
[in]my_spi_v: 対象とするSPI_Config構造体へのポインタ
[in]cs_state_after_tx: 設定するcs_state_after_tx
戻り値
なし

◆ SPI_set_rx_length()

void SPI_set_rx_length ( void *  my_spi_v,
const uint16_t  rx_length 
)

rx_lengthを設定する

引数
[in]my_spi_v: 対象とするSPI_Config構造体へのポインタ
[in]rx_length: 設定する受信データ長
戻り値
なし

◆ SPI_tx()

int SPI_tx ( void *  my_spi_v,
void *  data_v,
int  data_size 
)

SPI_Config構造体にて指定されたchへデータを送信します

引数
[in]my_spi_v: 対象とするSPI_Config構造体へのポインタ
[in]data_v: 送信データ格納先へのポインタ
[in]count: 送信データサイズ
戻り値
int: SPI_ERR_CODE に従う