[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 メーリングリストの案内