計測制御技術ラウンジ >> GPIB技術ラウンジ 全部 1- 最新50

C言語での作成方法

9 名前: TERA 投稿日:2003/12/16(火) 10:01 ID:mfgRR25k
お世話になります。皆さん詳しい説明有難うございます。
どうも私は『レジスタ』というものの解釈を勘違いしているような気がします。
もうすこし学習してみます。

さて、レス6に回答下さった内容ですが↓↓↓
>一般的には、I/O アドレッシングであれば専用命令で、
>メモリマップド I/O であれば、メモリアクセス命令で
>アクセスできます(ポインタにアドレスを直接代入するか
>定数ポインタをキャスト。コンパイラの最適化による
>省略等をふせぐため、volatile 修飾子をつけること)。
>一般的には、I/O アドレッシングであれば専用命令で、
"I/O アドレッシング"と"メモリマップド I/O"の区別が
分かりません。
ハード設計者に聞くとおそらく後者だと思うので、メモリアクセスで、
コードを書いていこうと思います。
既存のADコンバータ部のコードを見るとどうもメモリアクセス命令(?)
で書かれているようなので、真似てやってみます。

参考までにその既存のADコンバータコントローラ部の記述を
書いておきます。
勘違いがあればご指摘願います。


*** ADCコントロール部レジスタマップは下記となっている ***
アドレス レジスタ名
1100h  ADコントロール
1120h  ディレイ1
1124h  ディレイ2
1128h  ディレイ3
112Ch  ディレイ4
1130h  ディレイ5
1134h  ディレイ6
1180h  ADデータ1
1184h  ADデータ2
1188h  ADデータ3
118Ch  ADデータ4
1190h  ADデータ5
1194h  ADデータ6

============ 既存コード ============

#define na_wml_if ((void *)0x00001000) // altera_avalon_user_defined_interface
#define na_adc ((np_adc *)(na_wml_if+0x0100))  // ADC Controller
typedef volatile struct
{
unsigned ctl;
unsigned chena;
unsigned hole_a[6];
unsigned dly[6];
unsigned hole_b[18];
int data[6];
} np_adc;

===========================
上記はヘッダファイルに定義されています。
各関数で、
np_adc *p = na_adc;
p->ctl = 1;
として、メモリを書き換えているようです。

新着レスの表示

名前 : E-mail(省略可) :

文責:計測制御技術ラウンジ, Powered by ©タカヒロ@みちのく掲示板 [12ch BBS 2.03]