[i] Прерывания по SSPRXINTR и SSPTXINTR
Как сбрасывать прерывания по SSPRXINTR и SSPTXINTR? Если они сбрасываются автоматически, то в какой момент?
Прерывания сбрасываются автоматически.
Если в периферийном блоке складываются условия для генерации прерывания, то периферийный блок формирует сигнал (допустим, логическую "1") на входе контроллера NVIC, который, в свою очередь, вызывает прерывание ядра.
Рассмотрим прерывание на примере приемника. Оно говорит о том, что буфер заполнен наполовину, и с данными нужно что-то срочно делать, а именно - прочитать их. Если выйти из прерывания, не прочитав данные из буфера, то условия, которые привели к генерации прерывания, сохраняются - в буфере остаются всё те же 4 слова данных, а, может быть, уже и больше. Следовательно, на входе NVIC будет всё еще выставлена логическая "1", что приведёт к немедленной генерации прерывания.
Если данные из буфера прочитаны и данных в FIFO стало меньше 4-х, то условия генерации прерывания нарушаются: периферийный блок уже не формирует логическую "1" на входе NVIC, прерывание не возникает.
В случае с передатчиком ситуация аналогичная, только прерывание возникает, если в буфере содержится 4 или менее слов данных.