2022.12.6
前へ
次へ
ホームページトップへ戻る


PIC−USBIO using BASIC

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
USBインターフェースを内蔵したPICを使ってWindowsパソコンで外部回路を制御するための各種I/O基板の製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第121回]



●PICUSBIO−03(70)SPIモード(2)サンプルプログラム

前回からの続きです。
下は操作についての説明です。

[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet

SPIの初期設定ではいくつかのオプションを設定する必要があります。
その設定はプログラムでコントロールビット(SSPCON1<5:0>とSSPSTAT<7:6>)を適切にセットすることで行なわれます。
コントロールビットのセットによって下記が設定されます。
●マスターモード(SCK:クロック出力)
●スレーブモード(SCK:クロック入力)
●クロック極性(SCKのアイドルステート)
●データ入力のサンプルタイム(データ出力の中央または終わりの時点)
●クロックエッジ(データ出力が行なわれるSCKの立ち上がり/立ち下がりエッジ)
●クロックレート(マスターモードのみ)
●スレーブモードの選択(スレーブモードのみ)

MSSPは送信/受信シフトレジスタ(SSPSR)とバッファレジスタ(SSPBUF)により構成されます。
SSPSRは入出力データをシフトします。
MSB(最上位ビット)が先頭です。
SSPBUFに書き込まれたデータはSSPSRがデータの受信を完了するまで保持されます。
8ビットのデータの受信が完了するとその受信データはSSPBUFに送られ、SSPSTATレジスタのバッファフルインジケータビットBFと割り込みフラグSSPIFがセットされます。
この受信時のダブルバッファ機能(SSPBSRからSSPBUFへの転送機能)によって先に受信したデータが読み取られるよりも前に次のデータの受信開始が可能になります。
データ送受信中のSSPBUFへの書き込みは無効とされ、SSPCON1レジスタのデータ衝突検出ビットWCOLがセットされます。
(WCOLがセットされた場合には)SSPBUFにデータを完全に書き込むためにソフトウェアでWCOLビットをクリアする必要があります。

アプリケーションソフトウェアはSSPBUFに次の送信データを書き込む前にSSPBUFを読む必要があります。
SSPSTATレジスタのバッファフルビットBFはSSPBUFに受信データがロードされたとき(送信が完了したとき)にセットされます。
SSPBUFを読むとBFビットはクリアされます。
SPIが送信モードのみのときにはSSPBUFから読んだデータは無意味なものになります。
通常MSSP割り込みは送受信が完了したことを知るために使われます。
割り込みを使わないときにはソフトウェアでデータ衝突が起きないことを確かめながら送信を行ないます。

EXAMPLE15−1はSSPBUF(SSPSR)の読み取りを行ないながらデータ送信を行なうプログラム例です。

SSPSRは直接読み書きできません。
SSPBUFレジスタを介してのみアクセスできます。

ここまで(これからも)訳がわからない説明が続きます。
どうやらSPIについて基本的なことはわかっているものとして説明しているようです。
SPIがわかっていないと説明が意味をなしません。
それではそもそもSPIとはなんぞや?
ということを書き始めますとまたしても説明が長くなってしまいます。
ですからここではSPIはこんなもんじゃというぐらいのざっくりとした理解だけで進むことにします。
以下SPIについて簡単にまとめてみます。

SPIはシリアル通信の一種である。
送信と受信が相手とリング状のラインでつながっている(1ビット送信すると反対側から1ビット受信する)。
これには8ビットのシフトレジスタが使われシフトレジスタのビット7が送出されると同時にシフトレジスタのビット0に受信データが入ってくる。
そのタイミングにはマスター側が送出するCLKが使われる。
マスターに主導権がある(マスターがクロックを送出することで通信が行なわれる)。
クロックのHLのどちらに意味があるか(HアクティブかLアクティブか)、クロックの上がりエッジでデータを送出するのか下がりエッジで送出するのか(またはどちらのエッジでデータをラッチするのか)によってSPIには4通りのモードがある。
大体のところはその程度の理解になると思います。
よくわからなくてもEXAMPLE15−1のようにプログラムすればとにかくは動作してくれる(はず)と思います。
あとは必要に応じて各レジスタの説明に従って設定していくことになると思います。

PIC−USBIO using BASIC[第121回]
2022.12.6upload

前へ
次へ
ホームページトップへ戻る