PIC−USBIO using BASIC
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
USBインターフェースを内蔵したPICを使ってWindowsパソコンで外部回路を制御するための各種I/O基板の製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第151回]
●PICUSBIO−03(100)EUSART(2)非同期モード(1)非同期送信
EUSARTの2回目です。
EUSARTには同期と非同期の2種があります。
まずはそのうちの非同期から説明をします。
先に非同期送信から始めますがその前に非同期モードについての概略説明があります。
[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet
●非同期モード
EUSART送受信データは標準的なnon−return−to−zero(NRZ)フォーマットです。
NRZでは2つの状態があります。
VoHマークはデータビットが’1’の状態を示し、VoLスペースはデータビットが’0’の状態を示します。
NRZでは送信されるデータの各ビットの出力レベルが元のデータの各ビットと一致していて、中間のレベルはありません。
NRZ送信ポートのアイドルはマークの状態です。
各文字データの送信は1ビットのスタートビットで始まりその後に8ビットのデータが続き最後に1ビットかまたはそれ以上のビット数のストップビットで終ります。
スタートビットはスペースでストップビットはマークです。
送信データの各ビットの長さは1/ボーレートです。
内蔵している専用の8ビット/16ビットボーレートジェネレータはシステムクロックからボーレート周波数を作り出すのに使われます。
EUSARTの送受信はLSB(最下位ビット)が先頭です。
EUSARTの送信モジュールと受信モジュールは独立して動作しますがデータフォーマットやボーレートは共有しています。
パリティはハードウェアではサポートされませんがソフトウェアで9番目のデータビットをパリティビットにすることができます(本稿では9ビットモードは扱いません)。
[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet
●非同期送信
EUSART送信ブロックは前回お見せしました。
送信回路の中心はシリアル送信シフトレジスタ(TSR)です。
TSRはソフトウェアで直接アクセスすることはできません。
TSRは送信バッファTXREGレジスタから送信データを受け取ります。
●送信を可能にする
次の3つのコントロールビットによってEUSART非同期送信が可能になります。
・TXEN=1
・SYNC=0
・SPEN=1
その他のEUSARTコントロールビットについてはそれぞれ必要な設定を行ないます。
TXSTAレジスタのTXENビットをセットすることでEUSARTの送信回路がイネーブルになります。
TXSTAレジスタのSYNCビットをクリアするとEUSARTが非同期通信モードになります。
RCSTAレジスタのSPENビットをセットすることでEUSARTモジュールがイネーブルになるとともにTX/CK I/O端子が自動的に出力になります。
TX/CK端子がアナログ回路と端子を共用している場合にはANSELの対応するビットをクリアしてアナログI/Oをディスイネーブルにする必要があります。
PIC18F13K50の場合TX/CKはアナログとは端子を共用していませんがRX/DTはアナログと端子を共用しています。
NOTE1:SPENビットをセットするとRX/DT I/O端子は対応するTRISビットの状態に関係なくまたEUSART受信がイネーブルかどうかに関係なく自動的に入力になります。
RX/DX端子のデータは通常のPORTリードによって読み出すことができますがPORT出力はできません。
NOTE2:TXENビットをセットするとTXIF送信割込みフラグがセットされます。
[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet
●送信データ
送信は文字データをTXREGレジスタに書き込むことで開始されます。
そのデータが最初のデータであるか、その前のデータがTSRから完全に送出されていれば、TXREGのデータは直ちにTSRレジスタに送られます。
もしもTSRに前のデータが一部でも残っていれば前のデータのストップビットが送信されるまで新しいデータはTXREGに保持されます。
TXREGに保持されたデータはストップビットが送信された後すぐにTSRに送られます。
スタートビット、データビット、ストップビットの送信はTXREGからTSRにデータが送られた後すぐに開始されます。
[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet
●送信データの極性
送信データの極性はBAUDCONレジスタのCKTXPビットで設定できます。
デフォルトではこのビットは’0’で送信アイドルおよびデータは正論理です。
CKTXPビットを’1’にすると送信データは反転され送信アイドルおよびデータは負論理になります。
CKTXPビットによる送信データの極性の設定は非同期モードに限られます。
同期モードでのCKTXPビットは別の役割になります。
[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet
●送信割込みフラグ
PIR1レジスタのTXIF割込みフラグビットはEUSART送信がイネーブルでTXREGに送信データが無いときにセットされます。
別の言い方をすれば、TXIFビットはTSRがビジーで(まだ送信データが残っていて)新しい送信データがTXREGに送信待ち状態で保持されているとき以外はクリアされません。
原文のThe TXIF flag bit is not cleard...return invalid results.はマシン語プログラムでの命令実行サイクルについてのコメントです。
BASICプログラムでは意識する必要はありません。
TXIFビットはリードオンリーです。
ソフトウェアでセット、リセットすることはできません。
TXIF割込みはPIE1レジスタのTXIE割込みイネーブルビットをセットすることで可能になります。
しかし、TXIFフラグビットはTXIEビットの状態に関係なくTXREGが空であればいつでもセットされます。
今のところPICUSBIO用BASICインタプリタではEUSART通信の割込みは使わないつもりですので、割り込みについての説明は省略します。
[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet
●TSRステータス
TXSTAレジスタのTRMTビットによってTSRレジスタの状態を知ることができます。
TRMTはリードオンリーです。
TRMTビットはTSRレジスタが空のときにセットされ、TXREGからデータがTSRレジスタに送られるとクリアされます。
TRMTビットはTSRレジスタから全てのビットがシフトアウトされるまでクリアされたままになります。
TRMTビットをソフトウェアで読むことでTSRの状態を知ることができます。
Note:TSRレジスタはデータメモリにマッピングされていませんからユーザーが直接アクセスすることはできません。
[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet
●非同期送信のセットアップ
1.SPBRGH:SPBRGレジスタペアとBRGHおよびBRG16ビットを設定することで必要なボーレートを決定します。
2.SYNCビットをクリアしSPENビットをセットすることで非同期シリアルポートをイネーブルにします。
3.省略
4.送信データの極性を反転させたいときにはCKTXPビットをセットします。
5.TXENビットをセットすることで送信をイネーブルにします。TXENをセットするとTXIF割込みフラグビットがセットされます。
6.割込みについての説明です。ここは省略します。
7.9ビットモードについての説明です。ここは省略します。
8.8ビットのデータをTXREGレジスタにロードします。これによって送信が開始されます。
下は非同期送信のタイミング図です。
[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet
下は非同期送信に関係するレジスタです。
[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet
−未記載のところは’0’が読み出されます。
アミがかかっているところは非同期送信では使われません。
PIC−USBIO using BASIC[第151回]
2023.1.9upload
前へ
次へ
ホームページトップへ戻る