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;
として、メモリを書き換えているようです。
新着レスの表示