4-5 シリアルインターフェイス |
ビジュアルメモリ用カスタムチップは、2チャネルの同期式シリアルインターフェイスを内蔵しています。これは、データ長8ビットの同期式シリアルインターフェイスで、ポート1を使用しています。これにより、ビジュアルメモリ同士を接続した通信が可能になります。なお、Dreamcast接続時には、自動的にDreamcast専用インターフェイスによる通信となります。
![]() シリアル通信を確実に処理するための注意やテクニックについては「付録編」の「第21章 シリアル通信での注意事項」を参照してください。 |
![]() Dreamcast専用インターフェイス(Mapleバスモード)もポート1を使用しますので、同期式シリアル通信との排他使用になります。 同期式シリアルインターフェイスを使用する場合は、アプリケーションにてDreamcast専用インターフェイスの使用を禁止にしてください。 |
シリアルインターフェイスのおもな機能は、次のとおりです。
シリアルインターフェイスは2系統用意され、P10〜12を入出力端子とするSIO0系、P13〜15を入出力端子とするSIO1系があります。
通常ビジュアルメモリでは、SIO0をマスター、SIO1をスレーブとして使用します。
次に示す3種類の中から選択できます。また、SIO0系のみ転送クロックの極性を選択できます。
シリアルインターフェイスSIO0の転送クロックSCK0の極性を切り換えることができます。
シリアルインターフェイスのデータ通信で、LBSから転送するか、MSBから転送するかを切り替えることができます。
この切り替えは、チャネルごとに設定できます。
8ビットを超えるクロックを受けた場合にエラーが発生します。
8ビット転送で動作を停止するか、8ビット転送後も転送を継続するかを選択します。
割り込み要求許可ビットがセットされている場合、8進カウンタのオーバーフローによってSIO0,SIO1割り込み要求が発生します。
シリアルインターフェイスを制御するには、次に示す特殊機能レジスタを操作する必要があります。
SCON0,SCON1,SBR,SBUF0,SBUF1,P1,P1DDR,P1FCR
![]() シリアルインターフェイスで通信を行なう場合は、下記の点に注意してください。
|
シリアルインターフェイスは、図53と図54のように構成されています。
8ビットのシフトレジスタ(SBUF0,1)で構成され、指定されたクロックで動作します。
シフトクロックをカウントし、転送終了を検出します。
データ設定用の8ビットレジスタ(SBR)と8ビットリロードカウンタで構成されています。転送クロックに「内部クロック」を選択すると、ここで作成されたクロックでデータ転送が行われます。このボーレートジェネレータは、SIO0系、SIO1系の両方で使用されます。
![]() 「内部クロック」につていは「4.5.6 シリアル転送クロック」を参照してください。 |
シリアル転送前後の転送クロックの極性を制御します。
シンボル | アドレス | R/W | ビット7 | ビット6 | ビット5 | ビット4 | ビット3 | ビット2 | ビット1 | ビット0 |
SCON0 | 130H | R/W | SCON07 | SCON06 | − | SCON04 | SCON03 | SCON02 | SCON01 | SCON00 |
リセット時 | 0 | 0 | H | 0 | 0 | 0 | 0 | 0 |
ビット名 | 機能 |
SC0N07(ビット7) | 極性制御 |
0:動作停止時,SCK0='1'データ出力保持 1:動作停止時,SCK0='0'データ出力はSBUF0 のビット0 |
|
SC0N06(ビット6) | オーバーランフラグ |
0:オーバーランフラグなし 1:オーバーランフラグあり |
|
SC0N04(ビット4) | 転送ビット長制御 |
0:8ビット転送 1:連続転送 |
|
SC0N03(ビット3) | 転送制御 |
0:転送停止 1:転送開始 |
|
SC0N02(ビット2) | LSB/MSB先頭選択 |
0:LSB先頭 1:MSB先頭 |
|
SC0N01(ビット1) | シリアル転送終了フラグ |
0:転送中 1:転送終了 |
|
SC0N00(ビット0) | 割り込み要求許可 |
0:割り込み要求禁止 1:割り込み要求許可 |
SIO0で使用される転送クロックSCK0の極性を制御します。
‘1’をセットすると、SIO0の動作が停止したときにSCK0は‘0’になり、出力にはSBUF0のビット0が出力されます。
‘0’にリセットすると、SIO0の動作が停止したときにSCK0は‘1’になり、出力には転送された最後のデータが保持されます。
SIO0のシリアル転送のエラーを検出します。
8ビットのデータ転送が終了した(SCON01が‘1’になった)あとで転送クロックを受けた(立ち下がりを検出した)場合にセットされます。
また、連続転送を実行する場合は、8ビットごとにオーバーランフラグがセットされます。
![]() このフラグは自動的にリセットされません。アプリケーション側でリセットしてください。 |
SIO0の転送データのビット長を、8ビットの連続または8ビットに切り替えます。
連続(1)/8ビット(0)を選択します。
‘1’をセットすると、2バイト以上のデータを8ビット単位で連続して転送することができます。
‘0’にリセットすると、8ビットのデータを転送(1バイトだけ)することができます。
データ転送が終了しても、このフラグはリセットされません。アプリケーション側でリセットしてください。
SIO0の転送を開始または中止します。
‘1’をセットすると、SIO0の8ビットのシリアル転送を開始します。8ビット分の転送を終えるとフラグがリセットされます。
‘0’にリセットすると、SIO0の転送動作を中止します。
転送時のデータの先頭を、MSBからにするかLSBからにするかを選択します。
‘1’をセットすると、MSBから転送を開始します。
‘0’にリセットすると、LSBから転送されます。
![]() このフラグは、送受信に共通です。送信と受信でMSB先頭かLSB先頭かを合わせる必要がありますので注意してください。 |
シリアル転送の終了を検出します。
8ビットぶんのシリアル転送が終了するとセットされます。
また、このフラグがセットされているときに、転送クロックの立ち下がりが検出されると、オーバーランフラグがセットされます。
![]() このフラグは自動的にリセットされません。アプリケーション側でリセットしてください。 |
SIO0の転送終了による割り込み要求を許可または禁止します。
‘1’をセットすると、SIO0の転送終了によって割り込みベクトル0033HがCALLされます。
‘0’にリセットすると、割り込み要求は発生しません。
![]() 転送終了フラグは、転送ビット長制御の設定に関わらず、8ビット(1バイト)転送終了時に‘1’になります。 なお、オーバーランフラグは、オーバーランを検知した場合にセットされるだけで、割り込みなどは発生しません。 |
シンボル | アドレス | R/W | ビット7 | ビット6 | ビット5 | ビット4 | ビット3 | ビット2 | ビット1 | ビット0 |
SCON1 | 134H | R/W | − | SCON16 | − | SCON14 | SCON13 | SCON12 | SCON11 | SCON10 |
リセット時 | H | 0 | H | 0 | 0 | 0 | 0 | 0 |
ビット名 | 機能 |
SC0N16(ビット6) | オーバーランフラグ |
0:オーバーランなし 1:オーバーランあり |
|
SC0N14(ビット4) | 転送ビット長制御 |
0:8ビット転送 1:連続転送 |
|
SC0N13(ビット3) | 転送制御 |
0:転送停止 1:転送開始 |
|
SC0N12(ビット2) | LSB/MSB先頭選択 |
0:LSB先頭 1:MSB先頭 |
|
SC0N11(ビット1) | シリアル転送終了フラグ |
0:転送中 1:転送終了 |
|
SC0N10(ビット0) | 割り込み要求許可 |
0:割り込み要求禁止 1:割り込み要求許可 |
SIO1のシリアル転送のエラーを検出します。
8ビットのデータ転送が終了した(SCON11が‘1’になった)あとに転送クロックを受けた(立ち下がりを検出した)場合にセットされます。
連続転送中は、8ビット転送するごとにオーバーランフラグがセットされます。
![]() このフラグは自動的にリセットされません。アプリケーション側でリセットする必要があります。 |
SIO1の転送データのビット長を、8ビットデータ連続転送か、8ビットのみの転送かを選択します。
‘1’をセットすると、2バイト以上のデータを8ビット単位で連続して転送することができます。
‘0’にリセットすると、8ビットぶんのデータを転送することができます。この場合、8ビットの転送が終了すると転送終了フラグ(SCON11)がセットされます。
![]() データ転送が終了してもこのフラグはリセットされません。アプリケーション側でリセットしてください。 |
SIO1の転送を開始または中止します。
‘1’をセットすると、SIO1の8ビットのシリアル転送を開始します。転送が終了するとフラグは自動的にリセットされます。
‘0’にリセットすると、SIO1の動作を中止します。
転送時のデータの先頭を、MSBにするかLSBにするかを選択します。
‘1’をセットすると、MSBが先頭になります。
‘0’にリセットすると、LSBが先頭になります。
![]() このフラグは、送受信に共通です。送信と受信でMSB先頭かLSB先頭かを合わせる必要がありますので注意してください。 |
シリアル転送の終了を検出します。
8ビットのシリアル転送が終了するとセットされます。
‘1’にセットされてかつ、転送クロックの立ち下がりが検出されると、オーバーランフラグがセットされます。
![]() このフラグは自動的にリセットされません。アプリケーション側でリセットしてください。 |
SIO1の転送終了による割り込み要求を許可または禁止します。
‘1’をセットすると、SIO1の転送終了によって割り込みベクトル003BHがCALLされます。
‘0’にリセットすると、割り込み要求は発生しません。
![]() 転送終了フラグは、転送ビット長制御の設定に関わらず、8ビット(1バイト)転送終了時に‘1’になります。 なお、オーバーランフラグは、オーバーランを検知した場合にセットされるだけで、割り込みなどは発生しません。 |
シンボル | アドレス | R/W | ビット7 | ビット6 | ビット5 | ビット4 | ビット3 | ビット2 | ビット1 | ビット0 |
SBR | 132H | R/W | SBR7 | SBR6 | SBR5 | SBR4 | SBR3 | SBR2 | SBR1 | SBR0 |
リセット時 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
転送クロックに内部クロックを使用する場合、その転送レートを設定します。この値は、SIO0,SIO1の両方に共通です。転送レートTSBRは、次に示す式で得られます。
SIO0から転送するデータ(8ビットぶん)を格納します。
シンボル | アドレス | R/W | ビット7 | ビット6 | ビット5 | ビット4 | ビット3 | ビット2 | ビット1 | ビット0 |
SBUF0 | 131H | R/W | SBUF07 | SBUF06 | SBUF05 | SBUF04 | SBUF03 | SBUF02 | SBUF01 | SBUF00 |
リセット時 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
SIO1から転送するデータ(8ビットぶん)を格納します。
シンボル | アドレス | R/W | ビット7 | ビット6 | ビット5 | ビット4 | ビット3 | ビット2 | ビット1 | ビット0 |
SBUF1 | 135H | R/W | SBUF17 | SBUF16 | SBUF15 | SBUF14 | SBUF13 | SBUF12 | SBUF11 | SBUF10 |
リセット時 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
ポート1は、前述の同期シリアルインターフェイスに加え、Dreamcast専用インターフェイスの入出力ポートとしても使用されます。Dreamcast専用インターフェイスと同期式シリアルインターフェイスは同時に使用できません。
シリアルインターフェイスは、通信制御ビット(SCON03,SCON13)または転送ビット長選択ビット(SCON04,SCON14)をセットすることでシリアル転送が開始されます。転送モードには、Mapleバスモードとノーマルモードがあり、アプリケーションからはノーマルモードのみ利用できます。
データ通信に2本のデータラインと1本のクロックラインを使用します。データラインに入力専用のSIと出力専用のSOを用います。このモードは一般的な転送方法で、特定の相手に対しての通信に適しています。
![]() ビジュアルメモリ同士で通信する場合は、ノーマルモードを利用してください。 |
転送モードは、ポート1に関する特殊機能レジスタを操作することで指定できます。SIO0系,SIO1系、それぞれ独立して設定できます。
シフトレジスタは、シリアルクロックSCK0,SCK1の立ち下がりに同期してシフトし、シフトレジスタのデータはSO0,SO1端子から出力されます。また、シリアルクロックの立ち上がりでSI0,SI1端子に入力されたデータがシフトレジスタに取り込まれます。
出力端子、または内部クロック使用の転送クロックに対応するポートラッチデータをリセットする必要があります。ノーマルモードで使用する端子は、次のとおりです。
SIO0系 | SIO1系 | |
入力端子 | P11/SI0/SB0 | P14/SI1/SB1 |
出力端子 | P10/SO0(P11/SI0/SB0) | P13/SO1(P14/SI1/SB1) |
転送クロック | P12/SCK0 | P15/SCK1 |
![]() 転送を開始する1Tcyc前にはSCKnを‘1’にセットします。1Tcyc未満では正しいデータが出力されません。 |
▽SIO0系におけるポート1の設定(特殊機能レジスタ)(表10)
端子 | 機能 | 特殊機能レジスタ値 | |
P11/SI0/SB0P10/SO0 | 受信送信 | P11DDRP10P10DDRP10FCR | =0=0=1=1 |
P11/SI0/SB0P10/SO0 | 受信汎用入出力 | P11DDRP10FCR | =0=0 |
P12/SCK0 | 内部クロック | P12P12DDRP12FCR | =0=1=1 |
![]() ソフトウェアクロックは、プログラムでポート(P12)に‘0’と‘1’を交互に書き込み、その出力を転送クロックとします。 |
▽SIO1系におけるポート1の設定(特殊機能レジスタ)(表11)
端子 | 機能 | 特殊機能レジスタ値 | |
P14/SI11/SB1P13/SO1 | 受信汎用入出力 | P14DDRP13FCR | =0=0 |
![]() ソフトウェアクロックは、プログラムでポート(P15)に‘0’と‘1’を交互に書き込み、その出力を転送クロックとします。 |
![]() Pnを「出力」にする場合、PnDDRより先にPnFCRを‘1’にセットしてください。PnDDRを先に設定すると、PnDDR設定時にPnに‘0’が出力される場合があります。SIO0,SIO1共通です。 |
シリアル転送クロック(シフトクロック)は、SIO0系ではP12/SCK0端子、SIO1系ではP15/SCK1端子を使用します。応用回路の仕様によって、SIO0系、SIO1系のそれぞれについてシリアル転送クロックを、次の3種類から選択できます。また、SIO0系のみ転送クロックの極性を切り換えることができます。
通常は内部クロックを利用し、シリアル通信を行ないます。
ビジュアルメモリ専用カスタムチップに内蔵しているシリアル転送専用のボーレートジェネレータ(SBR)で転送クロックを作成します。このクロックは、SIO0系,SIO1系の双方に共用されます。
シリアルインターフェイスを内部クロックで動作させる場合は、ボーレートジェネレータを動作させる必要があります。この場合、内部クロックで動作しているシリアルインターフェイスのクロック端子(P12/SCK0,P15/SCK1)からシリアル転送クロックが出力されます。
転送レートとボーレートジェネレータの設定値の関係は、次のとおりです。なお、設定値は、10進数です。
TSBR=(256−[SBR設定値])×2×Tcyc (Tcycはサイクルクロックの周期)
![]() Pnを「出力」にする場合、PnDDRより先にPnFCRを‘1’にセットしてください。PnDDRを先に設定すると、PnDDR設定時にPnに‘0’が出力される場合があります。SIO0,SIO1共通です。 |
ビジュアルメモリ専用カスタムチップの外部から入力されるクロックでシリアル転送を行います。
ポートP12/SCK0、P15/SCK1端子にプログラムで‘1’,‘0’を交互に出力し、シリアル転送のクロックとします。
これらの転送クロックを使う場合、あらかじめP12/SCK0,P15/SCK1端子の設定が必要になります。
端子 | 機能 | 特殊機能レジスタ値 |
P12/SCK0 | 内部クロック | P12=0 P12DDR=1 P12FCR=1 |
外部クロック | P12DDR=0 | |
ソフトウェアクロック | P12=0/1 P12DDR=1 P12FCR=0 |
|
P15/SCK1 | 内部クロック | P15=0 P15DDR=1 P15FCR=1 |
外部クロック | P15DDR=0 | |
ソフトウェアクロック | P15=0/1 P15DDR=1 P15FCR=0 |
![]()
|
シリアル転送において、SIO0(SCON07=0のとき),SIO1系では、動作する前後に転送クロックSCK0は‘H’レベルを出力します(SCK0=1)。また、出力端子には最後に転送されたデータが保持されます(図60参照)。
一方、SCON07=1のときのSIO0系において、動作する前後に転送クロックSCK0は‘L’レベルを出力します(SCK0=0)。また、出力端子にはシリアルバッファ0(SBUF0)のビット0(SBUF00)が出力、保持されます(図61参照)。なお、SIO1系では、極性を切り換えはできません。
SCON07=0 | 動作停止時,SCK0=’1’, データ出力保持 |
SCON07=1 | 動作停止時,SCK0=’0’, データ出力はSBUF0のビット0 |
動作停止時,SCK1=’1’, データ出力保持 |
シリアル転送バッファの読み出し/書き込み時に、LSB→MSBの順にするか、MSB→LSBの順にするかを切り替えられます。
![]() ビジュアルメモリでは、どちらを推奨するかは特に定めていません。 一般のコンピュータに採用されているRS-232C規格では、LSB→MSBの順に転送しています。 |
この機能を使って、シリアルデータをLSB先頭にするか、MSB先頭にするかを切り換えることができます。この切り換えは、シリアル転送制御レジスタ(SCON0,SCON1)で行います。
![]() LSB/MSB先頭切り替えは、必ず転送を開始する前に行なってください。転送開始後に変更した場合は、以前の設定で転送されます。 |
▽ LSB先頭指定のシリアル転送バッファと内部バスの対応(図62)
▽ MSB先頭指定のシリアル転送バッファと内部バスの対応(図63)
図64と図65に、SIO0を使用したときのLSB先頭とMSB先頭のシリアル送受信のタイミングを示します。
オーバーラン検出機能は、シリアル通信エラーを検出する機能です。
割り込み要因フラグ(SCON01,SCON11)がセットされている場合、転送クロックの立ち下がりでオーバーランフラグ(SCON06、SCON16)がセットされます。
正常通信時のタイミングとオーバーラン発生時のタイミングは、図66のとおりです。8ビット目のデータの転送クロックの立ち上がりで、割り込み要因フラグ(SCON01,SCON11)はセットされます。この状態で転送クロックの立ち下がりが検出されるとオーバーラン検出フラグがセットされます。
なお、オーバーランフラグは、オーバーランを検知した場合にセットされるだけで、割り込みなどは発生しません。
![]()
|
8ビットを超えるシリアルデータを転送する場合、転送ビット長制御ビットSCON04またはSCON14をセットすることで、連続転送が可能です。
ボーレートの計算式から、TSBR=(256−[SBR])×2×Tcyc
∴[SBR]=256-TSBR/(2×Tcyc)
ここでTSBR=25.6msであり、Tcyc=366μsであるので、ボーレートジェネレータレジスタ(SBR)の設定値は次のようになります。
[SBR]=256-25600/(2×366)
=約221(10進)
→0DDH(16進)
![]()
|
[←] | [INDEX] | [→] |
(C)SEGA ENTERPRISES, LTD., 1999