かみやんの技術者ブログ

主にプログラムの話です

DRAMで使われていた。。

2)のH8簡易モニタを修正して、PWM制御に使っているポートを初期化しようと思って、H8簡易モニタのソースをダウンロードしてみてみたところ、オールアセンブラでした。ぐた。アセンブラは子供のころにZ80、大学時代に80386をやっていたが、いまさらH8のアセンブラを覚える気になれない。あと気になっていたのが、ロード中の暴走は左車輪のみ暴走する。おかしいなと思ってピン配置をみてみたところ、PWM信号生成にH8-3069の「97番ピン TIOCA1」を使っているのだが、H8簡易モニタのソースをずっと追って行ったら、

_BeforeInit:
		mov.b		#0xff, r0h
		mov.b		r0h, @IOREG_P1DDR	/* Enable A0  - A7  */
		mov.b		r0h, @IOREG_P2DDR	/* Enable A8  - A15 */
		mov.b		r0h, @IOREG_P3DDR	/* Enable D8  - D15 */
		mov.b		#P5DDR_A16, r0h		/* Enable A16 */
		mov.b		r0h, @IOREG_P5DDR
		mov.b		#P8DDR_CS1 | P8DDR_CS2, r0h
		mov.b		r0h, @IOREG_P8DDR	/* Enable CS1 - CS2	*/

		mov.b		#PBDDR_UCAS, r0h
		mov.b		r0h, @IOREG_PBDDR	/* Enable Upper CAS	*/
				/* DRAM: 2,048/32ms: 32ms / 2,048 = 15.625us	*/
				/* 20MHz / 8 / 39 = 1 / 15.6us			*/
		mov.b		#(32*(CLOCK_RATE/1000))/(8*2048), r0h
		mov.b		r0h, @IOREG_RTCOR
		mov.b		#RTMCSR_CKS1, r0h
		mov.b		r0h, @IOREG_RTMCSR	/* clock / 8		*/
		mov.b		#DRCRB_RCYCE | DRCRB_MXC1, r0h
		mov.b		r0h, @IOREG_DRCRB	/* CA: 10 bit, A23-A10	*/
		mov.b		#DRCRA_BE | DRCRA_DRAS0, r0h
		mov.b		r0h, @IOREG_DRCRA	/* Enable Upper CAS	*/

		mov.l		#CLOCK_RATE/1000, er0	/* Wait for DRAM stable	*/
BeforeInit1:
		dec.l		#1, er0
		bne		BeforeInit1

		rts

BeforeInitという関数を見つけた。ここのコメントに「CA: 10 bit, A23-A10」とある。そして自分が使っている97番ピンは、A23と兼用ピン。ビンゴ!ぶつかっていました。H8-3069のデータシートを読んだところDRAMのデータ転送として使う模様。これが原因かな。
しかし、理解できないのが、その転送中に97番ピンにつながっているCN29をオシロで見ても信号が見えない。0V近くで細かく揺れている程度。ふーむ。H8の97番ピンとCN29の間がどうなっているのか手元にAKI-H8/3069F-LANの回路図がないので不明。