68000 series hardware memo
データシートから読み取れたものを書いておく。68008 系は使わないので省く。正式な仕様は Freescale 社から提供されるデータシートを見ること。負論理表記は面倒なので省略した。
(昨夜書いた分はオートベクタとユーザーベクタを間違えていました。恥ずかしい)
68000, 68HC000, 68010
68000 は初代, HC000 はCMOS省電力版, 010 はベクタテーブルのポインタ向けレジスタなどを追加。 010 は派生版をあまり聞かないので需要は 020, 030, 040 に移行していったものと見られる。
入力
- CLK: main clock
- VPA: 6800 バス用兼オートベクタ使用フラグ
- BERR: バスエラー外部入力
- DTACK: いわゆるメモリウェイト
- BR: バス解放要求
- BGACK: BR->BG->BTACK とハンドシェイクする変な信号
- IPL2:0 割り込み入力
出力:
- FC2:0: プロセッサステータス
- E, VMA: 6800 バス用で省略 (6809 に Q ってのがあったような)
- A23:1: アドレスバス A23 から A1 で A0 はない
- AS, R/W, UDS, LDS: メモリコントロール
- BG: BR の応答で L の時に A23:1, AS, R/W, UDS, LDS, D15:0 が HiZ
双方向:
- RESET: RESET. オープンドレインで、 HALT と一緒に 100ms 以上 L レベルを入力すると CPU にリセットがかかる。一方、ソフト側から RESET 命令を実行すると L レベルを出力する。RESET 命令は周辺機器を RESET させるためだけで、CPU 自体は RESET されないはず。
- HALT: RESET 同様オープンドレインで、 HALT 命令を実行すると出力する。データシートを見るに BERR と組み合わせて例外を発生させるようだが、いまのところ必要性が理解できないので放置
- D15:0: データバス
68HC001
68000 からの削除ピン:
- 6800 系バス E,VMA,VPA
- BGACK
VPA は割り込み応答時に L になるとオートベクタ入力で IPL の入力値が割り込み番号となる。 H 時は D7:0 に任意のベクタ番号を入力することが出来る。(0 をいれると RESET がかかるのか?)
この VPA がなくなったのでオートベクタのみ使用なのかもしれない。
BGACK は BR に統合されたのでデータシートを見る感じ、68000 向け BR と BGACK は HC001.BR = 68000.BR and 68000.BGACK とすればよいだけに見える。
68000 からの追加ピン:
- MODE (input)
- A0 (output)
mode はデータバスを 8bit/16bit mode に切り換えることが出来る。ピンの入力取り込みはリセット直後のみで動作中に切り換えることはできない。これは 68008 からの機能を統合したものと思われる。 L が 8bit, H 16bit になる。
A0 は上記の 8bit mode 向けに追加したもの。 16bit mode では常時 H が出力されるので A0 はあまり意味がない。
68EC000, 68SEC000
現行商品で現在も Freescale で生産中。 SEC000 は電源電圧 3.3V にも対応しており、3.3V デバイスにもつなげられるようになっている。
68HC001 からの追加ピン:
- AVEC (input)
VPA から Autovector 使用フラグのみを復活させたもの。
input voltage level
VIH は min, VIL は max の値で、単位は V
VIH VIL (Vcc 3.3V)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
全て TTL level。
Current Dissipation
- SEC000 以外, Vcc=5V, f=10MHz, ID is 30 mA
- SEC000 Vcc=5V, f=10MHz, ID is 15mA (従来の1/2)
- SEC000 Vcc=3.3V, f=10MHz, ID is 10mA (従来の1/3)
SEC000 の省電力モード
stop 命令で割り込み待ちにすると、 clock を止めても良い。この実装のためにclock 停止予約レジスタを作って、ソフトでそれを設定してから stop 命令を実行すると待機電力を抑えられるとの趣旨。
なんだが、割り込む前に clock を再開させる必要があるので、タイマ割り込みなどには使えない。