CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

レジスタアクセスのテスト

AKI-H8からCPLD基板は3.3V系の変換のために74LCX245で橋渡ししています。
AKI-H8からCPLDを見ると12個のライトレジスタと4個のリードレジスタが見えます。

アドレス4本と制御線/RD,/WR,ACQSTの7本は5Vから3.3Vへの単方向変換
トリガ出力DONEは3.3Vから5Vへの単方向変換ですみますが
データバス8本は双方向への変換が必要で、このためデータバス用の74LCX245はDIRを/WRで
切り替えています。ここが一番心配だったのですが
オシロで見る限り、レジスタへのリード、ライトはタイミング、レベル的には問題なさそう。
ただしレジスタは全てリードまたはライトオンリなので本当に書けているかはまだわかりません。

CPLDの内容はトラ技の記事そのままなので制御の方法がいまいち解らないのですが、VHDLソースから
判断して次のような処理にしました。
トリガモード、サンプルレート、メモリサイズ、トリガカウント値をレジスタセットしてACQST←1。
この状態ではトリガ待ちなので条件が成立するとトリガがかかりDONEが1となります。
DONEを監視してこれが1になったらACQST←0としてSRAMデータレジスタを読むとそれらしきデータが
読み出せています。

void main(void)
{
 unsigned char dat;
 char str[256];
 int i;

 initio();
 while(1){
  P6.DR.BYTE= 0x00;  /* PORT6.D0 0 reset */
  *(volatile char *)0x400000=0x05; /* trigger mode */
  *(volatile char *)0x400004=0x04; /* clksel_reg 6MHz */

  *(volatile char *)0x400005=0x00; /* max_addr_reg 0x100byte */
  *(volatile char *)0x400006=0x01;
  *(volatile char *)0x400007=0x00;

  *(volatile char *)0x400009=0x01; /* single trigger */
  *(volatile char *)0x40000a=0x00;
  *(volatile char *)0x40000b=0x00;

  P6.DR.BYTE= 0x01;  /* PORT6.D0 1 acq_start */
  strout("arming.\n\r");
  while(!(P6.DR.BYTE & 0x02)); /*トリガ待ち*/
  P6.DR.BYTE= 0x00;  /* PORT6.D0 0 reset */
  strout("trig'ed.\n\r");
  for(i=0;i<256;i++){
   dat=*(volatile char *)0x400000; /* logic data */
   sprintf(str,"%02X ",dat);
   strout(str);
   dat=*(volatile char *)0x400000; /*ADCdata(dumy) */
  }
  strout("\n\r");
 }
}