HD6301はMC6800を元にしたワンチップマイコンです。
次の機能を内蔵しています。
- MC6800を拡張したMPU
- 4KバイトマスクROM
- 128バイトRAM
- 29本のパラレルI/O
- 16ビットタイマー
- SCI(Serial Communication Interface)
HD6301からマスクROMを無効化したのがHD6303です。
マスクROMは書き換え不可能ですので、SBC6303では外部にメモリを持てる「モード2」を使用しています。このモードではパラレルI/Oがアドレスバスとデータバスに割り当てられるため、ポート1の8本のみパラレルI/Oとして使用可能です。
コントロールレジスタ
RAMの先頭32バイトは内蔵ペリフェラルなどの設定やデータの受け渡しのために使われます。
Register | Address
================================================+=========
Port 1 Data Direction Register | $00
* Port 2 Data Direction Register | $01
Port 1 Data Register | $02
* Port 2 Data Register | $03
------------------------------------------------+---------
* Port 3 Data Direction Register | $04
* Port 4 Data Direction Register | $05
* Port 3 Data Register | $06
* Port 4 Data Register | $07
------------------------------------------------+---------
Timer Control and Status Register | $08
Counter (High Byte) | $09
Counter (Low Byte) | $0a
* Output Compare Register (High Byte) | $0b
* Output Compare Register (Low Byte) | $0c
* Input Capture Register (High Byte) | $0d
* Input Capture Register (Low Byte) | $0e
------------------------------------------------+---------
* Port 3 Control and Status Register | $0f
------------------------------------------------+---------
Rate and Mode Control Register | $10
Transmit/Receive Control and Status Register | $11
Receive Data Register | $12
Transmit Data Register | $13
------------------------------------------------+---------
* RAM Control Register | $14
* Reserved | $15〜1f
* のついたレジスタはSBC6303では使用しません。
パラレルI/O
SBC6303ではPort1の8本のみ使用できます。
Data Direction Register(DDR)の各ビットが各ピンに対応しており、”0″にセットすると入力に、’1’にセットすると出力にセットされます。ピンごとに入出力の設定が可能です。リセット時には全て入力に設定されます。
Data Registerにアクセスすることでデータの読み書きができます。
タイマー
SBC6303ではモード設定のためにポート2のビット0〜2が固定されています。そのため、タイマー機能は実質的にフリーランカウンターしか使えません。とはいえ内部割込みが使えますので、シングルボードコンピュータとして困ることはないと思います。
TCSR(Timer Control and Status Register)
- OLVL(Output Level)
- IEDG(Input Edge)
- ETOI(Enable Timer Overflow Interrupt)
- EOCI(Enable Output Compare Interrupt)
- EICI(Enable Input Capture Interrupt)
- TOF(Timer Over Flow Flag)
- OCF(Output Compare Flag)
- ICF(Input Capture Flag)
ETOIをセットすると内部カウンタが$ffff
から$0000
になったときに内部割り込みを発生させることができます。初期値はCounter($09
, 0a
)に書き込みます。
SCI(シリアル通信)
UARTが使用できます。フォーマットはスタートビット1、データビット8、ストップビット1、パリティなしの固定です。CTSとRTSは実装されていませんのでフローコントロールはできません。
送受信共に内部割り込みを発生させることが可能です。
TRCSR(Transmit/Receive Control and Status Register)
- WU(Wake Up)
セットすると連続した10個の’1’を受信するまでRDRF、ORFEフラグがセットされなくなります。 - TE(Transmit Enable)
セットするとSCI送信が可能になります。 - TIE(Transmit Interrupt Enable)
セットするとSCI送信時に内部割り込みが発生するようになります。 - RE(Receive Enable)
セットするとSCI受信が可能になります。 - RIE(Receive Interrupt Enable)
セットするとSCI受信時に内部割り込みが発生するようになります。 - TDRE(Transmit Data Register Empty)
送信データレジスタ(TDR)が空になったときセットされます。TRCSRを読み出し、TDRに書き込むとリセットされます。 - ORFE(Over Run Framing Error)
オーバーラン、フレーミングエラーが起こった場合にセットされます。 - RDRF(Receive Data Register Full)
受信データレジスタ(RDR)が埋まっているときにセットされます。TRCSRを読み出し、RDRを読み込むとリセットされます。
ORFEとRDRFは組み合わせて下記の状態を表します。
RDRF | ORFE | 状態 |
---|---|---|
0 | 0 | 受信データなし |
0 | 1 | 受信データあり |
1 | 0 | フレーミングエラー |
1 | 1 | オーバーランエラー |
RMCR(Rate and Mode Control Register)
CC1とCC0でシリアル通信のクロック源の設定を行います。
CC1 | CC2 | クロック源 | Port2 bit2 |
---|---|---|---|
0 | 0 | – | – |
0 | 1 | 内部クロック | 未使用 |
1 | 0 | 内部クロック | 出力 |
0 | 0 | 外部クロック | 入力 |
クロック源を内部クロックとした場合、SS1とSS0で通信速度を設定します。
SS1 | SS0 | XTAL E | 4.0 MHz 1.0 MHz | 4.9152 1.2288 | 6.0 MHz 1.5 MHz | 7.3728 1.8432 | 8.0 MHz 2.0 MHz |
---|---|---|---|---|---|---|---|
0 | 0 | E÷16 | 62,500 | 76,800 | 93,750 | 115,200 | 125,000 |
0 | 1 | E÷128 | 7,812.5 | 9,600 | 11,718.8 | 14,400 | 15,625 |
1 | 0 | E÷1024 | 976.6 | 1,200 | 1,464.8 | 1,800 | 1,953.1 |
1 | 1 | E÷4096 | 244.1 | 300 | 366.2 | 450 | 488.3 |
カスタム通信速度の設定ができるシリアル通信ソフトをお使いの方は通信速度を気にせずにチップの最高クロックを選んでください。
外部クロックを選択した場合は、通信速度の8倍のクロックを入力します。
割り込み
68系MPUでは割り込みベクタという領域があります。
各種割り込みがかかると全レジスタをスタックに退避し、それぞれのベクタ領域に保存されているアドレスをプログラムカウンタにロードします。
HD6301のベクタ領域は下記の通りです。
MSB | LSB | 割り込み |
---|---|---|
ffee | ffef | TRAP |
fff0 | fff1 | SCI(RDRF + ORFE + TRDE) |
fff2 | fff3 | TOF(Timer Over Flow) |
fff4 | fff5 | OCF(Timer Output Compare ) |
fff6 | fff7 | ICF(Timer Input Capture) |
fff8 | fff9 | IRQ(Interrupt Request) |
fffa | fffb | SWI(Software Interrupt) |
fffc | fffd | NMI(Non Maskable Interrupt) |
fffe | ffff | RESET |
SBC6303では拡張コネクタにIRQ割り込み端子が出ています。NMI割り込みは5Vに固定されているので使うことはできません。
TRAP割り込みは未定義命令をフェッチしたときに発生します。
リセット時には$fffe
と$ffff
に入っているアドレスから実行されることになります。RESETのみレジスタの退避はありません。
コメント