|
Проблема с приемом данных USART в ATtiny2313 |
|
|
|
Oct 29 2008, 09:28
|

Участник

Группа: Участник
Сообщений: 20
Регистрация: 28-10-08
Из: Москва
Пользователь №: 41 264

|
Помогите, плиз, разобраться с проблемой!
Спаял схему, в которой данные в МК должны поступать по протоколу Модбас через ADM1485. В CodeVisionAVR создаю проект, в котором настраиваю все параметры МК. Снизу часть сгенерированного текста, относящаяся к обработке прерывания:
// USART Receiver interrupt service routine interrupt [USART_RXC] void usart_rx_isr(void) { char status,data; status= UCSRA; data=UDR; if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0) ...
Все вроде бы собрано правильно, но МК не хочет воспринимать данные. Для проверки срабатывания прерывания я включил в текст строку:
// USART Receiver interrupt service routine interrupt [USART_RXC] void usart_rx_isr(void) { char status,data; status= UCSRA; data=UDR; PORTB.7=1; if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0) ...
После прихода на МК посылки, PORTB.7 меняет свое состояние, что говорит об срабатывании прерывания. Но если я включаю строчку после проверки if:
// USART Receiver interrupt service routine interrupt [USART_RXC] void usart_rx_isr(void) { char status,data; status= UCSRA; data=UDR; if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0) PORTB.7=1; ...
, то МК перестает реагировать на пакеты. Скорость передатчика и приемника выставлены одинаковыми. Я пробывал с разными скоростями. Пробывал и от внешнего кварца и от внутреннего генератора. Где-то я прочел, что в этом условии проверяется наличие аппаратной ошибки. Получается, что МК плохой? Или еще какая-то другая причина может быть?
|
|
|
|
|
 |
Ответов
|
Oct 29 2008, 11:48
|
Местный
  
Группа: Свой
Сообщений: 266
Регистрация: 8-12-05
Пользователь №: 11 964

|
Цитата(Прораб счастья @ Oct 29 2008, 13:19)  Подключение А и В я неоднократно проверял. Насчет первого есть вопрос: прерывание вызывается единожды при начале приема пакета или каждый принятый бит вызывает прерывание? Или каждый принятый байт? Задержка 100 мс стоит после того, как в регистр что-то записалось (видимо в UDR), т.е. то что записалось должно пройти проверку if-ом. Поправьте меня если я не прав! Прерывание в документе обозначается USART0, Rx Complete и вызывается, соответственно, после окончания приема всего байта. Насколько я понмю, в CodeVision запрещаются прерывания после вызова прерывания (хотя и в самой архитектуре AVR при входе в прерывание дальнейший вызов прерывания по умолчанию также блокируеся), так что задержки такой величины в прерываниях - это очень плохой тон, скорее всего, Вы пропускаете данные, на что потом и указывает DATA_OVERRUN. Чем вызвана первая ошибка - видимо, ошибкой формата пакета.
|
|
|
|
Сообщений в этой теме
Прораб счастья Проблема с приемом данных USART в ATtiny2313 Oct 29 2008, 09:28 Vladimir_J Доброе время суток !!!
1. После услови... Oct 29 2008, 09:39 Прораб счастья Скобка - { есть, просто здесь я ее забыл поставить... Oct 29 2008, 09:51 GDI Вы бы привели код полностью, чтоб никто не гадал, ... Oct 29 2008, 09:56 Прораб счастья Текст программы я не приводил, так как она мало от... Oct 29 2008, 10:11 =GM= Цитата(Прораб счастья @ Oct 29 2008, 10:1... Oct 29 2008, 12:09  SysRq Цитата(=GM= @ Oct 29 2008, 15:09) Для зап... Oct 29 2008, 12:52   =GM= Цитата(SysRq @ Oct 29 2008, 12:52) Цитиру... Oct 29 2008, 15:22    SysRq Цитата(=GM= @ Oct 29 2008, 18:22) Бит чёт... Oct 29 2008, 15:40  =GM= Цитата(Прораб счастья @ Oct 29 2008, 12:1... Oct 29 2008, 13:16 IVANS 1. Если данные передаются непрерывно, то задержка ... Oct 29 2008, 10:49 SysRq Цитата(Прораб счастья @ Oct 29 2008, 14:1... Oct 29 2008, 11:52 defunct Цитата(Прораб счастья @ Oct 29 2008, 12:2... Oct 29 2008, 11:47 Прораб счастья defunct:
Спасибо! Сегодня посмотрю Oct 29 2008, 11:51 Прораб счастья Цитата(Polaris @ Oct 29 2008, 14:48) Прер... Oct 29 2008, 12:19 Прораб счастья Сегодня вечером заменю кварц на 7.3728МГц, проверю... Oct 29 2008, 13:30 Прораб счастья Я, в общем-то, знаю что я передаю
Посылка у меня ... Oct 30 2008, 07:30 =GM= Цитата(Прораб счастья @ Oct 30 2008, 07:3... Oct 30 2008, 10:01 SysRq Попробуйте отправить неразрывно два байта: [0xFF][... Oct 30 2008, 08:46 IVANS GM
может так?
PORTB.7=~PINB.7
Попробуй включить п... Oct 30 2008, 10:13 SysRq Цитата(IVANS @ Oct 30 2008, 13:13) GM
мож... Nov 1 2008, 18:28  =GM= Цитата(SysRq @ Nov 1 2008, 18:28) Восстан... Nov 1 2008, 20:50
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|