Конструкции типа |= или &= сначала считывают регистр а потом пишут в него. А значит, если в SR были другие события они тоже считаются и запишутся. А для write_only регистра это означит, что все события могут обнулиться.
Да, изначально меня тоже волновал этот вопрос - считал регистр, а за время подписывания в него чего-то своего в других битах что-то изменилось. В связи с этим прошу показать реальной строкой или строками как правильно проводить такие действия. Если отошлёте к мануалам, застрелюсь.
За мою жизнь прошло штук 6-7 котов и кошек, некоторых было очень жалко. Вот недавно пропала кошечка, уж очень я к ней прилип. Остальных закапывать приходилось мне.