PIC−USBIO using BASIC
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
USBインターフェースを内蔵したPICを使ってWindowsパソコンで外部回路を制御するための各種I/O基板の製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第133回]
●PICUSBIO−03(82)I2Cモード(4)マスターモード(3)データの送受信/STOPコンディション
今回はデータ送受信とSTOPコンディションの説明です。
●データの送信
下はPIC18F13K50 Data Sheetのマスターモード送信と受信の説明です。
[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet
7ビットアドレスおよびデータの送信は単にその値をSSPBUFに書き込むだけで行なわれます。
(原文では”10ビットアドレス”についても書かれていますがそこは省略します)
バッファフルフラグビットBF(SSPSTATレジスタのbit0)がセットされボーレートジェネレータがカウントを開始し送信が行なわれます。
アドレス/データの各ビットはSCLが完全に下がったあとにSDAからシフトアウトされます。
原文のその後の数行は実に回りくどい言い回しです。
要するにSDAから出力されるデータ(の各ビット)はSCLがLのときにシフトアウトされるということを説明しています。
SDAの出力値はSCLがHの期間とその前後の一定の時間は変化されずそのまま維持されます。
8番目のビットデータが出力されたあと(8番目のクロックの下がりエッジで)BFフラグがクリアされマスターはSDAラインを開放します。
(SDAラインが開放されることで)スレーブは9番目のクロックの時にACKを返すことができます。
ACKの値は9番目のクロックの下がりエッジでACKDTビット(SSPCON2レジスタのbit5)に書き込まれます。
マスターがACKを受信するとACKDTビットは’0’になります。
ACKが受信されないときはACKDTビットは’1’になります。
9番目のクロックのあとSSPIFがセットされマスタークロック(ボーレートジェネレータ)は次のデータがSSPBUFに書き込まれるまで停止します。
SCLはLのままでSDAも変化しません(マスター出力はハイインピーダンス)。
原文ではこのあと同じ内容の説明がもう一度行なわれています。
ほぼ同じ内容ですからそこはパスします。
BFステータスフラグ
送信モードではCPUがSSPBUFに書込みを行なうとSSPSTATレジスタのBFビットがセットされ、8ビットのデータが全てシフトアウトされるとクリアされます。
WCOLステータスフラグ
送信状態にあるときに(SSPSRがまだデータのシフトアウトをしているときに)ユーザーがSSPBUFに書込みを行なうとWCOL(SSPCON1のbit7)がセットされます。
SSPBUFの中身は変わりません(書込みは実行されません)。
WCOLは次の送信までの間にソフトウェアでクリアしなければなりません。
ACKSTATステータスフラグ
送信モードのときにスレーブがアクノリッジ(ACK=0)を送るとSSPCON2のACKSTATビットがクリアされます。
スレーブがアクノリッジを送らない(ACK=1)とACKSTATビットがセットされます。
スレーブは自分のアドレス(ゼネラルコールを含む)が送られたことがわかるとアクノリッジを送ります。
また正しいデータを受信したときもアクノリッジを送ります。
●I2Cマスターモード受信
マスターモード受信はSSPCON2レジスタの受信イネーブルRCENビットをセットすることで可能になります。
Note:RCENビットはMSSPモジュールがアイドルのときにセットしなければなりません。
アイドルではないときにはセットできません。
ボーレートジェネレータがカウントを開始しカウントがロールオーバーするごとにSCL端子の出力が変化し(HからLに/LからHに変わり)、データがSSPSRにシフト入力されます。
8番目のクロックの下がりエッジでRCENビットは自動的にクリアされ、SSPSRのデータはSSPBUFに送られます。
BFフラグ(SSPSTATレジスタのbit0)とSSPIFフラグがセットされボーレートジェネレータはカウントを停止しSCLはLに固定されます。
MSSPはアイドル状態になって次のコマンドを待ちます。
CPUがSSPBUFのデータを読み取るとBFビットは自動的にクリアされます。
ここでユーザーはSSPCON2レジスタのACKイネーブルシーケンスACKENビットをセットすることでアクノリッジ(ACK)を送ることができます。
BFステータスフラグ
受信のときアドレス、データバイトがSSPSRからSSPBUFにロードされるとBFビットがセットされます。
このビットはSSPBUFが読まれるとクリアされます。
SSPOVステータスフラグ
受信のときひとつ前の受信によってBFフラグがセットされている状態で次の8ビットがSSPSRに読み込まれるとSSPOVビットがセットされます。
WCOLステータスフラグ
受信が行なわれているときに(SSPSRがまだ受信データをシフトしているときに)ユーザーがSSPBUFに書込みを行なうとWCOLビットがセットされます。
SSPBUFの中身は変わりません(書込みは実行されません)。
●STOPコンディション
[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet
送受信の終わりにSTOPシーケンスイネーブルビットPEN(SSPCON2レジスタのbit2)をセットすることでSDAラインがSTOPコンディションになります。
送受信が終わって9場目のクロックの下がりエッジでSCLラインはLに固定されます。
PENビットがセットされているとマスターはSDAラインをLにします。
SDAラインがLになっていることが確認されるとボーレートジェネレータは設定値をリロードして’0’になるまでカウントダウンします。
ボーレートジェネレータがタイムアウトするとSCL端子がHになり1TBRG時間(ボーレートジェネレータがロールオーバーカウントする時間)のあとSDA端子がHになります。
SCLがHの状態でSDA端子がHであることが確認されるとSSPSTATレジスタのPビットがセットされます。
1TBRG時間のあとPENビットはクリアされSSPIFビットがセットされます(FIGURE15−24参照)。
WCOLステータスフラグ
STOPシーケンスが進行中にユーザーがSSPBUFに書込みを行なうとWCOLビットがセットされます。
SSPBUFの中身は変わりません(書込みは実行されません)。
[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet
PIC−USBIO using BASIC[第133回]
2022.12.20upload
前へ
次へ
ホームページトップへ戻る