PIC−USBIO using BASIC
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
USBインターフェースを内蔵したPICを使ってWindowsパソコンで外部回路を制御するための各種I/O基板の製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第120回]
●PICUSBIO−03(69)SPIモード(1)SSPSTAT、SSPCON1
PIC18F13K50のData SheetではSPIモード(Serial Peripheral Interface)はMSSPモジュール(Master Synchronous Serial Port)の機能のひとつとして説明されています。
下はその部分のData Sheetからのコピーです。
[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet
Master Synchronous Serial Port(MSSP)は他の周辺機器やマイクロコントローラとコミニケーションをするためのシリアルインターフェースです。
そのような周辺機器としてはシリアルEEPROM、シフトレジスタ、ディスプレイドライバ、A/Dコンバーターなどがあります。
MSSPモジュールは下記の2つのモードのうちのひとつとして使うことができます。
●Serial Peripheral Interface(SPI)
●Inter−Integrated Circuit(I2C)
−フルマスターモード
−スレーブモード(汎用アドレスコード付き)
I2Cインターフェースは下記のモードをハードウェアでサポートします。
●マスターモード
●マルチマスターモード
●スレーブモード
上記の2モード(SPIとI2C)のうちまずはSPIモードについて考えていきます。
今回はその第一回目です。
上のData Sheetの右側部分にSPIモードの概要が説明されています。
SPIモードは8ビットのデータの同期式送信と受信を同時に行ないます。
4通りのSPIのモードの全てをサポートしています。
そのように書かれているのですがここでは「4通り」の中身については説明がありません。
SPIのモードのことかと思いますがData SheetのSPIについてのところをざっと読んだ限りではどこにも書いてないようです。
あるいは読み落としているのかもしれません(その通り。読み落としていました。それについては後日書くことにします)。
それはともかくとしまして、続きを読んでみます。
通信を確立するために基本的には3つの端子が使われます。
●シリアルデータOUT SDO
●シリアルデータIN SDI
●シリアルクロック SCK
上記に加えてスレーブモードでは4番目の端子が使われることがあります。
●スレーブセレクト SS
FIGURE15−1はSPIモードでのMSSPブロック図です。
うーん。
これだけの図ではよくわかりませんね。
これから具体的な動作の説明を読んでいくなかでこのブロック図が生きてくるかもしれません。
下はSPIモードで使うレジスタの説明です。
[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet
SPIモードでは4つのレジスタが使われます。
●SSPCON1 コントロールレジスタ
●SSPSTAT ステータスレジスタ
●SSPBUF シリアルレシーブ(受信)/トランスミット(送信)レジスタ
●SSPSR シフトレジスタ(直接アクセスはできません)
SSPCON1レジスタはREAD/WRITEできます。
SSPSTATレジスタの下位6ビットはリードオンリーです。
上位2ビットはREAD/WRITEできます。
SSPSRは送受信データのシフトレジスタです。
SSPBUFはSSPSRを間接的にアクセスするためのレジスタです。
SSPBUFはデータをWRITE/READするときのバッファレジスタです。
受信時はSSPSRとSSPBUFはダブルバッファを構成します。
SSPSRが1バイトのデータを完全に受信するとそのデータがSSPBUFに送られるとともにSSPIF割り込みフラグがセットされます。
送信時はSSPSRとSSPBUFはダブルバッファを構成しません。
SSPBUFにデータをWRITEするとそのデータはSSPBUFとSSPSRに同時に書き込まれます。
下はSSPSTATレジスタの説明です。
[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet
bit7 SMP:サンプルビット
SPIマスターモードのとき
1=受信データはデータ出力タイムの終わりにサンプリングされます。
0=受信データはデータ出力タイムの中央でサンプリングされます。
SPIスレーブモードのときはbit7は0にしなければなりません。
ここはわかりにくい表現です。
data output timeが何を意味するのかが不明です。
後の方で出てくる波形図などから推測するとどうやらここは「1ビットのデータを送出する期間」という意味のようです。
bit6 CKE:SPIクロック選択ビット(1)
1=クロックがアクティブからアイドルに変化するときに1ビットのデータが送出されます。
0=クロックがアイドルからアクティブに変化するときに1ビットのデータが送出されます。
bit5〜bit1はI2Cのみで使われます。
bit0はバッファフルステータスビットです(受信モードのみ)。
1=受信完了。SSPBUFに受信データが移されたことを示します。
0=受信未完了。SSPBUFは空です。
NOTE1:クロックの極性はSSPCON1レジスタのCKPビットで決められます。
下はSSPCON1レジスタの説明です。
[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet
bit7 WCOL:データ衝突検出ビット(送信時のみ)
1=前のデータの送出完了前にSSPBUFに書き込みが行なわれた(このビットはソフトウェアでクリアが必要)
0=データ衝突はおきていない
bit6 SSPOV:受信オーバーフローインジケータビット(1)
SPIスレーブモード
1=前のデータがまだSSPBUFにある(READされていない)ときに次のデータが受信された。オーバーフローが発生した場合SSPSRのデータは失われる。データ送信のみの場合であってもオーバーフローインジケータがセットされるのを避けるためSSPBUFを読まなければならない(このビットはソフトウェアでクリアが必要)
0=オーバーフローは発生していない
bit5 SSPEN:SSPイネーブルビット(2)
1=SSPがイネーブル。SCK、SDO、SDI、SSの各端子が使用可能
0=SSPはディスイネーブル。上記端子は通常のI/O端子として使われる
bit4 CKP:クロックの極性選択ビット
1=アイドルステートはHレベル
0=アイドルステートはLレベル
bit3−0 SSPM<3:0>:SSPモード選択ビット(3)
0101=SPIスレーブモード。CLK=SCK端子。SS端子は使用しない。SS端子は通常のI/O端子として使われる
0100=SPIスレーブモード。CLK=SCK端子。SS端子を使用する。
0011=SPIマスターモード。CLK=TMR2出力/2
0010=SPIマスターモード。CLK=Fosc(48MHz)/64
0001=SPIマスターモード。CLK=Fosc(48MHz)/16
0000=SPIマスターモード。CLK=Fosc(48MHz)/4
Note1:マスターモードではオーバーフローインジケータはセットされない。なぜならデータの受信(および送信)はSSPBUFへのWRITE命令の実行によって行なわれるからである。
Note2:SSPイネーブルのときは各端子はそれぞれ入力または出力の向きに設定しなければならない。
Note3:ここに列記されていないビット並び(1111〜0110)は予約されているかまたはI2Cモード専用である。
説明が長くなりますので今回はここまでにします。
この続きは次回にいたします。
PIC−USBIO using BASIC[第120回]
2022.12.5upload
前へ
次へ
ホームページトップへ戻る