linux上のgccで、ハードのレジスタを変更したいです。

HW_HOGE_REG 0x8005C060
上記アドレスの3ビット目に1を立てたいのですが、
先に読み出しを行うとするとエラーになります。

unsigned long address = *(volatile unsigned long*)0x8005C060;
printf("%ld",address);

上記コードで現在の設定値を呼び出そうとし、コンパイルし実行すると、
Segmentation fault
で終了します。

なぜでしょうか?