Arduinoプログラミング手法-(4)USI(Universal Serial Interface)によるSPI実装

調べて見るとUSIを提供しているMCUがそれなりにあった。既に廃品種になってるものがあることから以外に古くから提供されていたようである。

ATA6616C, ATA6617C, ATA664251
ATmega165, ATmega169, ATmega325, ATmega329, ATmega645, ATmega649
ATmega3250, ATmega3290, ATmega6450, ATmega6490
ATtiny1634, ATtiny2313, ATtiny2313A, ATtiny4313
ATtiny24, ATtiny44, ATtiny84, ATtiny24A, ATtiny44A, ATtiny84A
ATtiny43U, ATtiny26, ATtiny25, ATtiny45, ATtiny85
ATtiny87, ATtiny167, ATtiny261, ATtiny461, ATtiny861

USI自体は同じ仕様であるが、MCUにより入出力ポートの割り当てや、次回に紹介するTWIのISR名が違うようなのでまずはその違いを吸収するためのヘッダーファイルを作成。

【SPI/TWI共通ヘッダーファイル】

SPIマスタークラスのテンプレート・クラス実装。他サイトで紹介されているものとの相違点は、SPIクロック指定ができることと、複数スレーブにも対応可能となっていること。

【SPIマスタークラス】

【標準的な使い方】

【複数スレーブ対応(1)】

【複数スレーブ対応(2)】