
NAT7210を動かす③
投稿日 2010/07/26
「NAT7210を動かす②」のつづきです。
●デリミタとEOS
デリミタはデータの最後を示します。データが文字列の場合はLF、CR+LF、LF+EOI、CR+LF+EOIなどがデリミタとして用いられます。デリミタを検出したら一連のデータを受信したことになるので、その文字列を解析し必要な処理に移ります。
デリミタの検出方法としては、
○NAT7210に標準で備わっているLF検出を用いる方法。
○EOSR(End Of String Register)にデリミタにしたいコード(EOS)をセットしておき、NAT7210にそのコードを検出させる。
○NAT7210にEOIを検出させる。
○プログラムでLF等を判別する。
NAT7210に検出させる場合は、プログラムでそのステータス・ビットをハンドリングするか、割り込みを利用します。
最後の方法はユーザ自信がデリミタを判別する方法で、データを読み込むたびに行います。
データがバイナリの場合はEOI信号が用いられます。
PICにおけるプログラミング
●READ/WRITE
PICはZ80のようにIN/OUT命令はありませんので、すべてのデジタルI/Oポートのレベルを、所定の手順になるようにプログラミングしてやらなければなりません。
アクセスするレジスタはRS2,1,0の3ポートで指定します。今回の回路ではPICのPORTE2,1,0にそれぞれつないでいます。
データのDI7からDI0の8ラインは、PICのPORTC7からPORTC0に割り当てています。
READ時はRDを、WRITE時はWRをTrue(RD/WRはLow True)にします。今回はPORTBのBit2,Bit1にそれぞれつないでいます。
CS(Chip select)は、NAT7210がひとつしかないので、GNDにつないで常にTrue(Low)、つまり常にセレクトされている状態にしておきます。
注意すべきは、PORTCをREAD/WRITEの双方向で使うので、入力ポートにするか、出力ポートにするかを切り替えて使わなければならないことです。今回はデフォルトでWRITE、つまり出力ポートとしていますので、READ時に入力ポートに設定し、READが終われば出力ポートに戻しておきます。
○READの手順
1.PORTE2,1,0にレジスタ・アドレスを乗せる
2.PORTCを入力ポートにする
3.RDをTrueにする
4.PORTCを読み込む
5.RDをFalseにする
6.PORTCを出力ポートに戻す
PORTE = _ADSR; //PORTEにレジスタADSRのアドレスをセット
GPIB_read(); //readサブルーチンをコール
void GPIB_read() {
TRISC = 0xFF; //PORTCを入力ポートにする
PORTB.F2 = _LOW; //PORTBのBit2(RD)をLowにする
databyte = PORTC; //PORTCを読み込む
PORTB.F2 = _HIGH; //PORTBのBit2(RD)をHighにする
TRISC = 0; //PORTCを出力ポートに戻す
}
○WRITEの手順
1.PORTCにデータを乗せる
2.PORTE2,1,0にレジスタ・アドレスを乗せる
3.WRをTrueにする
4.WRをFalseにする
PORTC = databyte; //PORTCにデータを乗せる
PORTE = _CDOR; //PORTEにレジスタCDORのアドレスをセットする
GPIB_write(); //writeサブルーチンをコール
void GPIB_write() {
PORTB.F1 = _LOW; //PORTBのBit1(WR)をLowにする
PORTB.F1 = _HIGH; //PORTBのBit1(WR)をHighにする
}
コンパイラはMikroC Pro for PICです。
(つづく)
(JF1VRR)