реклама на сайте
подробности

 
 
> Прерывания UART MSP430F5437, Объясните тонкости, пожалуйста.
1921
сообщение Oct 6 2010, 06:47
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 29-09-10
Пользователь №: 59 820



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



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th July 2025 - 22:54
Рейтинг@Mail.ru


Страница сгенерированна за 0.01756 секунд с 7
ELECTRONIX ©2004-2016