メモリ マップド デバイスを扱う C コードにはまだ問題があります。現時点では、揮発性ポインターとして書き込むレジスターのアドレス空間を宣言し、以下に示すようにデータを書き込みます。
volatile unsigned int *wr_register = (int *) 0x40000000;
volatile unsigned int *c_register = (int *) 0x40000100;
...
main{
*wr_register = 0x01234567;
*c_register = 0x01234567;
*(c_register+1) = 0x89abcdef;
}
これは多かれ少なかれうまく機能します。ただし、メモリにマップされたレジスタとやり取りする特定の読み取りおよび書き込み関数が必要です。理想的には、次のようになります。
const unsigned int wr_register = 0x40000000;
const unsigned int c_register = 0x40000100;
function write_REG(unsigned int address, int offset, int data)
{
(unsigned int*) (address + offset) = data;
}
main{
*write_REG(0x40000000, 0, 0x01234567);
*write_REG(0x40000100, 0, 0x01234567);
*write_REG(0x40000100, 1, 0x89abcdef);
}
正直なところ、まだ試していませんが、これが適切な方法であるかどうかを誰かに教えてもらえないでしょうか?
編集: 多分それは他の誰かに役立つかもしれません.ここに私の機能があり、それらは機能しているようです. 参考になるコメントをありがとうございます!
void reg_write(unsigned int address, int offset, int data)
{
*((volatile unsigned int*)address + offset) = data;
}
int reg_read(unsigned int address, int offset)
{
return(*((volatile unsigned int*)address + offset));
}
どうもありがとう