|
MSP430F149, прерывания USART., Странный порядок... |
|
|
|
Jul 17 2009, 06:05
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
RS485. Хочу управлять направлением передачи без таймера. План был такой: не отключать приёмник у драйвера 485, ловить эхо переданных символов, и по приёму последнего символа отключать передатчик. Пишу: Код // прерывание по приёму. void rx_interrupt(void) { if (is_tx_on()) // передатчик включен? { if (!tx_on_) // передача окончена? tx_off(); // отключаем передатчик. } else // обычный приём. { RxBuf.put(RXBUF0); } }
// прерывание по передаче void tx_interrupt(void) { if (TxBuf.is_empty()) { tx_on_ = false; } else TXBUF0 = TxBuf.get(); } }; Вроде бы всё логично. Сначала опустошается TXBUF0, возникает прерывание tx_interrupt, я сбрасываю флажок tx_on_. Затем этот последний символ принимается, возникает прерывание по приёму, я отключаю передатчик. Но. Почему-то сначала возникает прерывание по приёму, а лишь затем - по опустошению передатчика! Как такое может быть?
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
 |
Ответов
|
Jul 17 2009, 16:40
|
Участник

Группа: Участник
Сообщений: 54
Регистрация: 25-09-07
Пользователь №: 30 836

|
Цитата(AHTOXA @ Jul 17 2009, 10:05)  Но. Почему-то сначала возникает прерывание по приёму, а лишь затем - по опустошению передатчика! Как такое может быть? У UART MSP430 есть режим, когда прерывание возникает по приему стартового бита. Сделано это, чтобы можно было усыпить контроллер, и в то же время успеть включить DCO для приема символа. slau049f.pdf USART Peripheral Interface, UART Mode page 13-19 Receive-Start Edge Detect Operation The URXSE bit enables the receive start-edge detection feature. The recommended usage of the receive-start edge аeature is when BRCLK is sourced by the DCO and when the DCO is off because of low-power mode operation. The гltra-fast turn-on of the DCO allows character reception after the start edge detection. When URXSE, URXIEx and GIE are set and a start edge occurs on URXDx, the internal signal URXS will be set. When URXS is set, a receive interrupt request is generated but URXIFGx is not set. User software in the receive interrupt service routine can test URXIFGx to determine the source of the interrupt. When URXIFGx = 0 a start edge was detected and when URXIFGx = 1 a valid character (or break) was received......Проверьте состояние URXSE. Может быть, получается так, что у Вас в течение одного такта срабатывают и прерывания по передаче и по приему, а первым обслуживается прием (приоритет я навскидку не помню)?
|
|
|
|
|
Jul 17 2009, 16:49
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(=DS= @ Jul 17 2009, 22:40)  У UART MSP430 есть режим, когда прерывание возникает по приему стартового бита. Не, не оно. Я проверял уже Цитата Может быть, получается так, что у Вас в течение одного такта срабатывают и прерывания по передаче и по приему, а первым обслуживается прием (приоритет я навскидку не помню)? Да нет. Во-первых, приоритет передатчика выше. А во-вторых (и в главных), прерывание передатчика должно возникать по опустошению буфера передатчика, задолго до физического окончания передачи (передача ведётся из сдвигового регистра). Собственно из-за чего и приходится городить весь этот огород - нужно узнать момент окончания передачи, а не момент опустошения буфера передатчика.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
Сообщений в этой теме
AHTOXA MSP430F149, прерывания USART. Jul 17 2009, 06:05 Dog Pawlowa Цитата(AHTOXA @ Jul 17 2009, 09:05) Но. П... Jul 17 2009, 06:35 MrYuran Цитата(Dog Pawlowa @ Jul 17 2009, 10:35) ... Jul 17 2009, 07:10  Dog Pawlowa Цитата(MrYuran @ Jul 17 2009, 10:10) Вряд... Jul 17 2009, 07:20   AHTOXA Цитата(MrYuran @ Jul 17 2009, 13:10) Стоп... Jul 17 2009, 07:49    MrYuran Цитата(AHTOXA @ Jul 17 2009, 11:49) То ес... Jul 17 2009, 08:37     AHTOXA Цитата(MrYuran @ Jul 17 2009, 14:37) Возм... Jul 17 2009, 09:05 MrYuran Ещё один эксперимент.
Кодvoid test_UART()
... Jul 17 2009, 09:23 AHTOXA Цитата(MrYuran @ Jul 17 2009, 15:23) Итог... Jul 17 2009, 09:49  MrYuran Цитата(AHTOXA @ Jul 17 2009, 13:49) Попро... Jul 17 2009, 10:51   AHTOXA Цитата(MrYuran @ Jul 17 2009, 16:51) ровн... Jul 17 2009, 11:14  =DS= Цитата(AHTOXA @ Jul 17 2009, 20:49) Да не... Jul 17 2009, 17:20   MrYuran Цитата(=DS= @ Jul 17 2009, 21:20) Не поле... Jul 17 2009, 18:20    =DS= Цитата(MrYuran @ Jul 17 2009, 22:20) Номе... Jul 17 2009, 18:27     AHTOXA И правда
Но у меня дело точно не в этом. В пон... Jul 17 2009, 19:47      AHTOXA Докладываю, всё в порядке, нашёл в чём проблема
Я ... Jul 20 2009, 09:11
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|