As described at rust-embedded/volatile-register#10, there is a big problem with having things like &VolatileCell and using that for volatile accesses: these references are marked as dereferencable and the compiler is allowed ti insert spurious (and non-volatile) read accesses.
There currently is no way in Rust to have references without permitting the compiler to do spurious reads.
Some more discussions for context: