Джентльмены! Помогите чайнику в освоении, пжалста!
Суть вкратце такова. USCI_A имеет один адрес в таблице векторов прерываний на приём и передачу, поэтому при срабатывании прерывания мы сначала влетаем в обработчик, а потом разбираемся, "кто звонил". Прерывание срабатывает только при разрешении локально и GIE, флаги устанавливаются и так. Вектор IV и флаг IFG сбрасываются сразу при входе в прерывание (точнее, при первом чтении IV, которое обычно в примерах анализируется с помощью switch). Ситуация: Сначала по UART передаётся с помощью прерывания 5 байт, после передачи последнего локальные прерывания на передачу запрещаются и разрешаются прерывания на приём. Далее следует приём, скажем, 6 байт. НО! Влетая в обработчик по приёму, программа нормально отрабатывает switch - case:2, после этого заходит в case:4 (передача, хотя она запрещена локально. Флаг, конечно, стоит, куда же он денется.) и передаёт лишний байт. Итог: Передаётся 5 байт, потом ещё 6 при приёме. Откуда это,а? Нет, я понял, что если после каждого case ставить break, то всё будет нормально. Но почему всё-таки? Ведь не должен он попадать внутрь case 4, даже если 2 флага стоят. Прерывания-то по передаче запрещены, и IV просто не должен генериться.