Open Design Computer Project

オリジナルCPUから作る本格的自作コンピューター

ユーザ用ツール

サイト用ツール


hardware:dps

DPS : Default Peripheral System

DPSはプロセッサが持つ基本的な周辺デバイスと、それらをコントロールするインターフェースからなります。DPSを使用するには必ずIDTをセットしてから、IDTS命令を実行する必要があります。それ以前の状態においてDPSの動作は保障されません。

DPS Interface

アドレスマップ

DPSプロセッサに接続されるすべてのIOを管理しています。以下はIO開始アドレスを0としたとき(実際にはオフセットがかかります)のIOマップを示します。

アドレス名称
0x0~0x3UTIM64AMCFGR
0x4~0xBUTIM64AMCR
0xC~0x13UTIM64ACC0R
0x14~0x1BUTIM64ACC1R
0x1C~0x13UTIM64ACC2R
0x24~0x2BUTIM64ACC3R
0x2C~0x2FUTIM64ACC0CFGR
0x30~0x33UTIM64ACC1CFGR
0x34~0x37UTIM64ACC2CFGR
0x38~0x3BUTIM64ACC3CFGR
0x3C~0x3FReserved
0x40~0x43UTIM64BMCFGR
0x44~0x4BUTIM64BMCR
0x4C~0x53UTIM64BCC0R
0x54~0x5BUTIM64BCC1R
0x5C~0x63UTIM64BCC2R
0x64~0x6BUTIM64BCC3R
0x6C~0x6FUTIM64BCC0CFGR
0x70~0x73UTIM64BCC1CFGR
0x74~0x77UTIM64BCC2CFGR
0x78~0x7BUTIM64BCC3CFGR
0x7C~0x7FUTIM64FLAGS
0x80~0xFFReserved
0x100~0x103SCITXD
0x104~0x107SCIRXD
0x108~0x10BSCICFG
0x10C~0x11FReserved
0x120~0x123MIMSR
0x124~0x127MIMIR(Non support)
0x128~0x12bRTCCFG
0x12c~0x12fRTCMNTT
0x130~0x133RTCCLNDT
0x134~0x1FBReserved
0x1FC~0x1FFLSFLAGS

なお、64bitのレジスタはビッグエンディアンになります。

DPS Device

DPS内にあるデバイスのレジスタは、すべてIOアクセス扱いとなり、Wordアクセスのみ許可されます。

UTIM64x : User Timer 64bit

64bitのPeriodic/Non Periodicタイマーです。A~Bがあり32bitモード、64bitモードを選択可能です。カウンタは完全に独立していていて、それぞれには4つのコンペアカウンタが搭載されています。

カウンタに入力されるクロックは49.1520MHzの固定クロックが入力されています。

レジスタ一覧

UTIM64xMCFGR (M??? Configuration Register)

ビットフィールド0
名称ENA
ENA (Enable)
  • 0 : カウンタはDisableになります。メインカウンタは停止し、比較カウンタと一致していたとしても割り込み要求は発生しません。
  • 1 : カウンタはイネーブルになります。メインカウンタはインクリメントし、各比較カウンタがイネーブルでカウント値が一致すると、割り込みが発生します。

32bitバスのプロセッサでリードする場合(MIST32)64bitモードで使用するときは以下の点に注意が必要です。

  1. UTIM64xMCRのメインカウンタをリードする場合、確実に正確な値を取得したいときはUTIM32xCFGR_ENAをディセーブルにしてからリードする必要があります
  2. UTIM64xMCRのメインカウンタを、UTIM64xMCR_ENAをディセーブルにしないで取得したい場合、先にHi側をリードし次にLo側を読み込みます。続けてHi側を再度リードし最初に読んだHi側の値と一致すればそれらの値が正しく、一致しなければその値は不正確となります。この方法は推奨される方法ではないため、どうしても行いたい場合のみ使用してください。

UTIM64xMCR (M?? Counter Register)

ビットフィールド63~0

UTIM64xMCFGR_ENAがイネーブルの時カウントアップをするタイマーです。ディセーブルの時はカウンタは現在のカウント値を保持したまま停止し、すべての割り込み要求をDisableにします。このレジスタを書き換えるときは必ずUTIM64xMCFGR_ENAをDisableにしてから行う必要があります。

このカウンタは常に64bitでカウントアップします。

UTIM64xCCxR (Compare Count Register)

ビットフィールド63~0

このカウンタはUTIM64xMCRと比較され、値が一致するとUTIM64xCCxCFGR_ENAとUTIM64xCCxCFGR_IEがEnableの時に割り込みを発生します。

UTIM64xCCxCFGR (Compare Count Configuration Register)

ビットフィールド3210
名称MODEBITIEENA
ENA (Enable)

該当のUTIM64xCCxRは有効になります。UTIM64xCCxCFGR_MODEが1の場合、カウント値が一致するごとにカウント値が更新されます。

IE (Interrupt Enable)

割り込みを引き起こすかどうかを設定します。UTIM64xCCxCFGR_MODEとUTIM64xCCxCFGR_ENAが1の場合、IEが0または1どちらの場合でもUTIM64xCCxRの値は更新されます。

  • 0 : 該当のUTIM64xCCxCFGRはカウント値が一致しても割り込みは発生しません。
  • 1 : 該当のUTIM64xCCxCFGRはカウント値が一致すると割り込みを発生します。
BIT (Bit select)
  • 0 : 比較カウンタは32bitモードで動作します。メインカウンタとの比較は32bitの範囲内のみで行われます。
  • 1 : 比較カウンタは64bitモードで動作します。メインカウンタとの比較は64bitで行われます。
MODE (Mode select)

比較カウンタのモードを設定します。

  • 0 : Non Periodicモードで動作します。設定されたUTIM64xCCxRは、再度UTIM64xCCxRをライトしない限り変化しません。
  • 1 : Periodicモードで動作します。設定されたUTIM64xCCxRは、メインカウンタと値が一致するごとに、UTIM64xCCxRに最後に設定された値が加算され、常に同じタイミングで割り込みが発生するように更新されます。

UTIM64FLAGS

ビットフィールド76543210
名称B0B1B2B3A3A2A1A0

このレジスタは、いずれかのUTIM64xCCxCFGR_IEがイネーブルである場合に正しい値を返します。すべてのUTIM64xCCxCFGR_IEがディセーブルの時、Readしても未定義なデータを返します。このレジスタは割り込み後以外のタイミング(割り込みが起きる前のタイミング)で読むと、不正な値を返すとともに、UTIM64FLAGSも不正な値に書き換わる可能性があります。かならず割り込みが起きてからリードしてください。

タイマが割り込みを引き起こすとこのレジスタにその割り込みを引き起こしたカウンタが示されます。たとえばUTIM64FLAGS_A0のビットが立っていた場合UTIM64ACC0Rが割り込みを引き起こしたということになります。このレジスタをリードすると現在のフラグの状況を返し、その後全てのフラグはクリアされます。このレジスタはReadのみ許可され、Writeしてもそれは無視されます。

SCI (Serial Console? Interface)

UARTのモジュールです。Rx/Tx Queueは常に16Entey持っています。SCIモジュールはStopbit:1, Paritybit:none, フロー制御なし動作します。baudrateはSCICFGで設定可能です。 SCIモジュールデータ受信の際に割り込みを引き起こします。この時引き起こした割り込み要因はLSFLAGSに格納されます。この時SCIRXD_VALIDがinValidになるまでリードし続けることによりQueueをEmptyに戻すことが可能です。

RXD BufferがFullでUARTからデータを受信すると、一番遅く受信したBufferのデータを捨て、新規に受信したデータがFIFOの最後に登録されます。

SCITXD

ライトすると7:0までがUART Transmit Queueに登録され、ボーレート値にのっとって送信されます。リードした時は常にゼロを返します。

SCIRXD

ビットフィールド31予約7:0
名称VALID予約DATA

リードするとUART Receive Queueにから1Byteだけリードされます。SCIRXD_VALIDが0の時、リードしたデータは無効になります。ライトすると常に無視されます。

SCICFG

ビットフィールド31:14131211:98:65:210
名称ReservedRCLRTCLRRIRETIREBDRRENTEN
TEN

送信モジュールの動作を設定します。

  • 0 : 送信モジュールはDisableで送信を行いません。Transmit FIFOにデータが残る場合データはクリアされません。
  • 1 : 送信モジュールはEnableで送信を行います。
REN

受信モジュールの動作を設定します。

  • 0 : 受信モジュールはDisableで受信を行いません。Receive FIFOにデータが残る場合データはクリアされません。
  • 1 : 受信モジュールはEnableで受信を行います。
BDR

SCIのボーレートを設定します。

ボーレート
0x09600bps(Default)
0x1110bps
0x2300bps
0x3600bps
0x41200bps
0x52400bps
0x64800bps
0x714400bps
0x819200bps
0x938400bps
0xA57600bps
0xB115200bps
0xC230400bps
0xD460800bps
0xE921600bps
0xFReserved
TIRE

送信割り込みに関しての設定を行います。送信割り込みは選択したFIFOの数と同じまたは下回ると割り込みが発生します。なお、内部としては送信後FIFO数が該当数に一致しているかどうかをトリガとして割り込みを発生します。

割り込みが発生し、LSFLAGSをloadした後はLSFLAGSは0になります。その時に割り込み条件が整っている場合であっても、一度割り込みを起こすと、次に割り込みを起こすタイミングは、一度その割り込み条件がclearされた時になります。

例えば、TIREが0x1に設定されている時、

  1. 送信FIFO ⇐ 1 : 割り込み発生
  2. LSFLAGSをRead → 自動的にLSFLAGSは0x0
  3. 割り込みトリガ条件の変更
    1. 送信FIFO ⇐ 1 : 割り込みしない。
    2. 送信FIFO > 2 : “1”ステートに戻る

なお、TIREの値が変化した時、常に“1”ステートにリセットされます。

割り込み
0x0割り込みはDisable
0x1Transmit FIFO ⇐ 1で割り込み(非ポーリング)
0x2Transmit FIFO ⇐ 2で割り込み(非ポーリング)
0x3Transmit FIFO ⇐ 4で割り込み(非ポーリング)
0x4Transmit FIFO ⇐ 8で割り込み(非ポーリング)
0x5~0x7Reserved
RIRE

受信割り込みに関しての設定を行います。なお、0x5はFIFOがFullになった時をトリガとして割り込みを要求するため、後続のデータを受信する場合を破損する可能性があります。

割り込み
0x0割り込みはDisable
0x1Receive FIFO >= 1で割り込み(非ポーリング)
0x2Receive FIFO >= 2で割り込み(非ポーリング)
0x3Receive FIFO >= 4で割り込み(非ポーリング)
0x4Receive FIFO >= 8で割り込み(非ポーリング)
0x5Receive FIFO == 16で割り込み(非ポーリング)
0x6~0x7Reserved
TCLR

1が書き込まれたタイミングで送信バッファをクリアします。リードした時、このこのレジスタは常に0を返します。

  • 0 : バッファをクリアしません
  • 1 : バッファをクリアします。
RCLR

1が書き込まれたタイミングで受信バッファをクリアします。リードした時、このレジスタは常に0を返します。

  • 0 : バッファをクリアしません
  • 1 : バッファをクリアします。

MI : Memory Infomation

MIMSR

SPDやそれと類似する機能を持つシステムから取得したメモリサイズを書き込みます。IOSRが書き込まれるタイミングと同じときにセットされます。このレジスタはリセット時のみに書き込まれます。

ビットフィールド31-0
名称MIMSR
MIMIR

接続されたメモリに関する詳細情報を保持するレジスタです。

未定

RTC : Real Time Clock

RTCCFG

コンフィグレジスタ。未定

RTCMNTT(RTCMNTTH, RTCMNTTL)

システムのモノトニック時間を示します。64bitのレジスタで構成され、このいずれかのレジスタに対応するライトでは常に2つのレジスタがクリアされます。この2つのレジスタはフリーランニングカウンタになっており、システムリセット後からカウントアップし始め、(2^64)-1の次は再び0に戻り、カウントアップを続けます。カウントアップするタイミングはRTCCFGにて指定します。

ビットフィールド31-0
名称RTCMNTTH
役割RTCMNTTの上位32bitレジスタ
ビットフィールド31-0
名称RTCMNTTL
役割RTCMNTTの下位32bitレジスタ
RTCCLNDT

システムのカレンダ時間の取得に使用します。リセット後、一度外部RTCからカレンダ時刻を取得し、このレジスタに書き込まれます。リセット後にこのレジスタおよび、外部RTCに値を書き込むにはRTCCFGの設定を行い、RTCCLNDTに対するライトを行います。

ビットフィールド31-1716-1211-65-0
名称ReservedRTCCLNDT_HOURTCCLNDT_MINRTCCLNDT_SEC
RTCCLNDC

システムのカレンダ情報取得に使用します。リセット後、一度外部RTCからカレンダ時刻を取得し、このレジスタに書き込まれます。リセット後にこのレジスタおよび、外部RTCに値を書き込むにはRTCCFGの設定を行い、RTCCLNDCに対するライトを行います。

ビットフィールド31-1716-98-54-0
名称ReservedRTCCLNDT_YEARTCCLNDT_MONRTCCLNDT_DAY

デバイス共有

LSFLAGS(変更後)

ロースピードの割り込み要因専用フラグです。このフラグは書き込みは無視され、リードした時にフラグはクリアされます。

ビットフィールド予約10
名称予約SCIRIESCITIE
SCIRIE
  • SCIモジュールでデータを受信して、SCICFG_RIREの条件と一致した時にこのフラグがセットされます。
SCITIE
  • SCIモジュールでデータを送信して、SCICFG_TIREの条件と一致した時にこのフラグがセットされます。

===LSFLAGS(変更前)=== ロースピードの割り込み要因専用フラグです。このフラグは書き込みは無視され、リードした時にフラグはクリアされます。 ^ビットフィールド|予約|0| ^名称|予約|SCIR| ==SCIR== * SCIモジュールでデータを受信して、SCICONF_IREの条件と一致した時にこのフラグがセットされます。

hardware/dps.txt · 最終更新: 2015/05/26 23:38 by takahiro