[Armadillo:01006] Re: PC104バス 16bitアクセスが冗長

小川 英 email@hidden
2006年 5月 15日 (月) 14:13:02 JST


小川です、お世話になっております。

> お世話になります。
> inoueです。
> 
> 私も以前、PC104バスの16ビットアクセスでお世話になりました。
> 参考になるか分かりませんが、参照してみてください。
> 
> 過去ログです。
> http://lists.atmark-techno.com/pipermail/armadillo/2005-December/000762.html

>inoue様
ありがとうございます。

http://lists.atmark-techno.com/pipermail/armadillo/2005-December/000766.html
に書かれてます、-march=arm4の指定で、
期待する動作になり、無事解決しました。

また、今まで、アセンブラでshortアクセスが全てldrb,strb×2回に展開されて
いたのですが、こちらもldrh,strhに展開されるようになりました。



>yoshi様

> > ■readw(0xf7000002)
> > (アドレス+2(16bitメモリ空間)へのreadwアクセス)
> >   ・期待する動作
> >     アドレスが2,SBHE*がLowでリードアクセスが1回発生。
> >   ・実際の動作
> >     アドレスが2,SBHE*がLowと、
> >     アドレスが3,SBHE*がLowと、
> >     アドレスが4,SBHE*がLowと、
> >     アドレスが5,SBHE*がLowでリードアクセスが4回発生。
> 
> 上記の場合だと 8bitで 4回 (32 bit)アクセスしているように見えます。上記
> の部分だけで良いのでソースと disassembleしたものを見せてもらえませんか?

SBHE*がLowですので、16bitで4回アクセスしているように見えました。

ソースの該当する箇所は以下の通りです。

#ifndef __KERNEL__
  #define __KERNEL__
#endif
#include <asm/io.h>

	(略)

	unsigned short test = isa_readw( addr );
	// addrには0xf7000002が入ります。

アセンブラの該当する箇所は以下の通りです。
	ldr	r2, [fp, #-28]
	ldr	r3, [fp, #-24]
	mov	r1, #8
	mov	r3, r3, asl #3
	add	r3, r3, r2
	add	r1, r3, r1
	ldr	r3, [fp, #-32]
	ldrb	r2, [r3, #0]	@ zero_extendqisi2
	ldrb	r3, [r3, #1]	@ zero_extendqisi2
	orr	r3, r2, r3, asl #8
	mov	r3, r3, asl #16
	mov	r3, r3, lsr #16
	str	r3, [r1, #0]

#公開できない部分があり、情報不足で申し訳ありません。

なお、上記ソースを単体で動作させてバスをモニタしても
    アドレスが2,SBHE*がLowと、
    アドレスが3,SBHE*がLowでリードアクセスが2回発生。
といったようにアセンブラどおりのアクセスしかしませんでした。
こちらのソース特有の現象かもしれませんがご参考になれば幸いです。

-- 
小川 英 <email@hidden>

※万一、誤送されたものを受領されましたら、内容の複製、配布、再送信、
 他の人への開示等をなさらないようにお願いします。また、お手数ですが、
 当方までお知らせ頂き、通信を消去または廃棄して下さるようお願いします。




armadillo メーリングリストの案内