Union members seem to be volatile automatically. Is it right ?
A sensible implementation (such as Keil) would probably treat them as volatile but I am not sure if this is guaranteed. You would be best to explicitly qualify them as volatile.