PIC−USBIO using BASIC
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
USBインターフェースを内蔵したPICを使ってWindowsパソコンで外部回路を制御するための各種I/O基板の製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第132回]
●PICUSBIO−03(81)I2Cモード(3)マスターモード(2)ボーレート/STARTコンディション
今回はボーレートとSTARTコンディションの説明です。
下はPIC18F13K50 Data Sheetのボーレートの説明です。
[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet
I2Cマスターモードではボーレートジェネレータ(BRG)の値はSSPADDレジスタに保存され繰り返し引用されます(Figure15−17)。
SSPBUFに書込みが行なわれるとボーレートジェネレータは自動的にカウントを開始します。
オペレーションが完了すると(具体的に言うならば送信データの最後のビットが送信されそれに続くACKが受信されると)内部クロックは自動的にカウントを停止しSCL端子は最後の出力レベルのままになります。
Table 15−3はシステムクロック(Fosc)とSSPADDにロードされるBRG値とクロックレートの関係を示しています。
EQUATION15−1はその計算式です。
PICUSBIOのシステムクロック(Fosc)は48MHzです。
1命令の実行クロック(Fcy)はその1/4の12MHzです。
I2Cクロックが100KHzのときのボーレートはTABLE15−3を見ると77Hです。
これを計算で確認してみると(77H=119)
FSCL=12000/(119+1)=100KHz
になります。
どーでもよいことなのですがTABLE15−3のFSCLのところには(2 Rollovers of BRG)と書いてあります。
はて?
計算式には1/2とか2倍とかの値はないが?
と思ってよく見ましたらその上のFIGURE15−17のBRG Down CounterのクロックがFOSC/2になっていました。
48/2=24MHzのクロックで120をダウンカウントすると
24000/120=200(KHz)になりますから多分これが半波のクロックなのでしょう。
それを2回カウントすることで100KHzになります。
なるほど。
でもどーでもよいことでした。
下はマスターモードのSTARTコンディションタイミングの説明です。
[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet
STARTコンディションを開始するためには、ユーザーはSSPCON2レジスタのSTARTイネーブルビットSENをセットします。
SDAとSCLラインがHであることが確認されるとボーレートジェネレータはSSPADDの値をリロードしてカウントを開始します。
またどーでもよいことなのですがここではSSPADD<6:0>と書かれています。
下のほうでは<7:0>になっています。
意図的かと思ったりミスプリントかと思ったりしたのですがその両方かもしれません。
さきほどのTABLE15−3ではBRGの値の最大値は77Hですから結果的に<6:0>でも<7:0>でも同じ値になります。
どーでもよいことでした。
ボーレートジェネレータがタイムアウト(TBRG)したときSDAとSCLがHならばSDAがLになります。
SCLがHのときにSDAをLにする動作がSTARTコンディションです。
そのときSSPSTAT1レジスタのSビットがセットされます。
それに続いてボーレートジェネレータはSSPADDの値をリロードして再びカウントします。
ボーレートジェネレータがタイムアウト(TBRG)するとSSPCON2レジスタのSENビットはハードウェアによって自動的にクリアされます。
ボーレートジェネレータは停止しSDAラインはLになったままSTARTコンディションは終了します。
なんだかくどい書き方です。
SDAとSCLラインがHであることを2度も確認しています。
そんなんこっちがマスターなんだから確認する必要はないじゃんと思ったのですが、たぶんマルチマスターモードが関係しているのではと思います。
Note:もしもSTARTコンディションを開始するときにSDAとSCLがLになっているかまたはSTARTコンディションの進行中にSDAをLにするよりも前にSCLがLになるとバスコリジョン(衝突)が発生し、バス衝突割込フラグBCLIFがセットされます。
STARTコンディションは中止されI2Cモジュールはリセットされてアイドル状態になります。
WCOLステータスフラグ
もしもユーザーがSTARTコンディションの進行中にSSPBUFに書込みを行なうとWCOLビット(SSPCON1のbit7)がセットされSSPBUFの値は変わりません(SSPBUFへの書込みは実行されません)。
Note:命令コードをキューに入れる(命令を実行待ち行列に入れる)ことはできないため(前回Note:参照)、SSPCON2レジスタの下位5ビットはSTARTコンディションが完了するまでは書込みできません。
このあとデータの送受信の説明になるのですがちょっと説明が長くなりますので今回はここまでにします。
なおPIC18F13K50 Data SheetではSTARTコンディションのほかにリピーテッドSTARTコンディションの説明もあるのですが、それについては省略することにします。
説明が長くなりますからそのほかにも省略するつもりのところなどがありますのでもしPICのI2Cについてより詳しく知りたいと思われる方は同Data Sheetをご参照ください。
PIC−USBIO using BASIC[第132回]
2022.12.19upload
前へ
次へ
ホームページトップへ戻る