As the above, "const volatile unsigned short *addr" doesn't mean addr can't be modified during the program but means that the contents of addr(*addr) cant't be
changed. As a result, put "volatile" in front of "unsigned short *addr" is OK, that's only to tell compiler not to save the value of "addr" in the register since it may be changed in another place, and it of course can be changed.