Наиболее подробно тема прерываний описана в этом ресурсе Обработка_исключений_в_M-профиле.
В регистре PRIMASK используется только младший бит. При установке данного бита в "1", приоритет текущего исполнения повышается до 0, следовательно он может быть прерван только прерыванием с более высоким приоритетом - HardFaul, NMI или сбросом.
__set_PRIMASK(1); // Отключение всех прерываний кроме NMA и HardFault
В регистре FAULTMASK так же используется только младший бит. Когда он установлен, приоритет выполняющегося в данный момент кода повышается до –1, и он может быть прерван только NMI или сбросом. Этот бит может быть установлен лишь при текущем уровне приоритета, равным или большим нуля. Попытка установить этот бит в обработчике HardFault или NMI игнорируется. Возврат из любого исключения, кроме NMI, сбрасывает этот бит.
__set_FAULTMASK(1); // Отключение всех прерываний кроме NMA
Регистр BASEPRI содержит одноимённое поле, которое позволяет повысить приоритет текущего выполняемого кода и тем самым повлиять на способность исключений вытеснить его с процессора. Поле BASEPRI не запрещает прерывания полностью, а лишь поднимает «верхнюю планку» приоритета. Значение в BASEPRI влияет на текущий приоритет выполнения лишь в случае, если оно численно меньше, чем собственный приоритет текущего выполняющегося обработчика (т.е. нельзя понизить приоритет кода ниже его собственного уровня), при этом значение 0 используется как индикатор того, что повышение приоритета с помощью BASEPRI отключено.
// Отключение прерываний с меньшим или равным приоритетом. // Активны прерывания с численным значением приоритета < N. __set_BASEPRI(N);