Непонятки с UARTом

Обсуждаем контроллеры компании Atmel.
Ответить
Встал на лапы
Сообщения: 129
Зарегистрирован: Ср янв 18, 2012 19:37:10

Сообщение Prosperous »

Здравствуйте, уважаемые Коты! Возник у меня вот такой трабл. Передаю данные по UART. В режиме отладки AVRstudio со встроенным отладчиком все работает "на ура". Я вижу как в UDR записываются данные. А вот при отладке через JTAGICE mkII, так сказать в боевых условиях, возникают проблемы, чтобы не писалось - UDR пуст. Это косяк в моем коде, либо данные улетают и я просто не успеваю их заметить? Привожу кусок кода с небольшими пояснениями. Спасибо за ответ.

Код: Выделить всё

signed char temperature_out=0; // глобальная переменная, инициализация, далее этой переменной присваиваются    
                                                    значения температуры с датчика

void RX_Analyze()
{
-----------  -----
-----------  -----
case CODE_SENSOR_ANSWER:
    USART_Transmit(temperature_out);
    break;

-----------  -----
}

и уже в другом сишном файле

uchar USART_Transmit(uchar data)
{
      while (!( UCSRA & (1<<UDRE))) 
    ;  
  	UDR = data;
}

и в хедере

extern signed char temperature_out;
uchar USART_Transmit(uchar data);
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

А данные то реально передаются или нет?Может действительно они уже улетели, пока вы там ресницами хлопаете? :))
Вообще можно для диагностики таких выходов либо просто терминал подключить либо сделать пару отладочных строк кода, в которых при изменении состояния бита готовности регистра зажигается или тухнет светодиод.И повесить на пару свободных ног все это дело.
Контактная информация:
Реклама
Встал на лапы
Сообщения: 129
Зарегистрирован: Ср янв 18, 2012 19:37:10

Сообщение Prosperous »

тык вот и непонятно передаются они или нет :) можно, конечно, осциллографом проверить, но вопрос по коду, может я туплю или что - то не учитываю, хотя на мой взгляд, все логично :)
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Сообщение uk8amk »

Регистр UDR представлен двумя регистрами. Один для записи, другой для чтения. Пытаясь прочитать его после помещения байта, вы в реальности обращаетесь к регистру приемника который пуст.
Чтобы узреть факт передачи в функции usart_transmit продублируйте цикл проверки флажка UDRE после помещения байта в UDR.
Реклама
Эиком - электронные компоненты и радиодетали
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Сообщение uk8amk »

Еще можно объединить пины RX-TX и смотреть самим отладчиком эхо. Т.о. не надо осцилла или терминала.
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

Да точно и таким образом как раз можно прочитать из этого регистра.Первая отправка- ноги не замкнуты проверяем UDR нет сообщения
Вторая отправка - ноги замкнуты проверяем UDR сообщение должно быть на месте.
Контактная информация:
Реклама
Встал на лапы
Сообщения: 129
Зарегистрирован: Ср янв 18, 2012 19:37:10

Сообщение Prosperous »

В терминале посмотрел, вроде передается :) спасибо за советы, возьму на вооружение )
Ответить

Вернуться в «AVR»