外部SRAM操作

  H8/3048Fボードとc328(scam)の間には、SRAMを載せたボードを入れます。



  SRAMの容量は、32kバイトで非圧縮の160x120(19200バイト)で
  画像を取得した時、1画面分を保存できます。

  H8のファームウエアで、c328(scam)が転送してきた画像データを
  SRAMに保存します。

  GBC(GameBoyCamera)のハードウエアと共有できるようにしたため
  次のような回路にしてあります。



  SRAMへのデータ保存、SRAMからのデータ取得が必要になるので
  それぞれを定義します。


アドレス、データ信号処理

回路図に示したように、SRAMのアドレス、データはポートAを 利用して設定あるいは取得します。  アドレス16ビットは、ポートAに接続した2個の8ビットレジスタ に格納します。  16ビットを上位8ビット、下位8ビットの2回に分けて出力し  ラッチパルスAHT、ALTを与えて、記憶します。  16ビットアドレスの更新には、関数update_addressを利用します。  アドレスの上位8ビットは、ひとつ前の処理から変化があれば  レジスタに格納する方式とし、可能な限りアクセス回数を減ら  しておきます。   void update_address(UWORD x)   {    UBYTE ah ;    UBYTE al ;    /* send upper byte */    ah = x / 256 ;    if ( ah != pre_ah ) {    PADR = ah ;    atrg(TRG_UPPER | ON ) ;    pre_ah = ah ;    atrg(TRG_UPPER | OFF) ;    }    /* send lowrebyte */    al = x % 256 ;    PADR = al ;    atrg(TRG_LOWER | ON ) ;    al = ah ;    atrg(TRG_LOWER | OFF) ;   }  アドレス設定後、SRAMへの書き込みでは、ポートAにデータを出力します。  SRAMからの読み込みでは、ポートAを入力に設定後、データを入力します。  データ出力時は、nWE信号をH=>L=>Hとして、SRAMにデータを記憶します。  データ入力時は、nOE信号をH=>L=>Hとして、SRAMにデータを記憶します。  nWE信号とnOE信号のパルス出力を、ひとつの関数にまとめます。   void atrg(UBYTE x)   {    if ( x == 0 ) { ALT = OFF ; }    if ( x == 1 ) { ALT = ON ; }    if ( x == 2 ) { AHT = OFF ; }    if ( x == 3 ) { AHT = ON ; }   }

SRAMへのデータ保存

アドレス(16ビット)とデータ(8ビット)を渡して ポートA操作とラッチパルスを出力します。   void put_sram(UWORD adr,UBYTE dat)   {    UBYTE result ;    /* send address */    update_address(adr);    /* send data */    PADR = dat ;    /* enable WE */    SRAM_OE = LOFF ;    SRAM_WE = LON ;    /* wait */    result = 0 ;    /* disable WE */    SRAM_WE = LOFF ;   } データのセットアップタイム、ホールドタイムが必要なので ダミーで変数に値を入力する処理を入れています。

SRAMからのデータ取得

アドレス(16ビット)を渡して、ポートA操作とラッチパルス を出力します。さらに、ポートAの入出力方向を切替えながら データを入力します。 UBYTE get_sram(UWORD adr) { UBYTE result ; /* send address */ update_address(adr); /* change input */ PADDR = 0x00 ; /* enable OE */ SRAM_WE = LOFF ; SRAM_OE = LON ; /* get 1 byte */ result = PADR ; /* disable OE */ SRAM_OE = LOFF ; /* change output */ PADDR = 0xff ; return result ; } データの衝突を避けるため、アドレスを出力したなら 即座に、入力に切替えます。データ入力後、nOE信号を ディセーブルにしてから、出力に戻します。
目次

inserted by FC2 system