Страница 1 из 1

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

Добавлено: Пн окт 01, 2012 15:18:29
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);

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

Добавлено: Пн окт 01, 2012 17:07:41
vitalik_1984
А данные то реально передаются или нет?Может действительно они уже улетели, пока вы там ресницами хлопаете? :))
Вообще можно для диагностики таких выходов либо просто терминал подключить либо сделать пару отладочных строк кода, в которых при изменении состояния бита готовности регистра зажигается или тухнет светодиод.И повесить на пару свободных ног все это дело.

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

Добавлено: Пн окт 01, 2012 19:45:54
Prosperous
тык вот и непонятно передаются они или нет :) можно, конечно, осциллографом проверить, но вопрос по коду, может я туплю или что - то не учитываю, хотя на мой взгляд, все логично :)

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

Добавлено: Пн окт 01, 2012 21:34:35
uk8amk
Регистр UDR представлен двумя регистрами. Один для записи, другой для чтения. Пытаясь прочитать его после помещения байта, вы в реальности обращаетесь к регистру приемника который пуст.
Чтобы узреть факт передачи в функции usart_transmit продублируйте цикл проверки флажка UDRE после помещения байта в UDR.

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

Добавлено: Пн окт 01, 2012 21:46:06
uk8amk
Еще можно объединить пины RX-TX и смотреть самим отладчиком эхо. Т.о. не надо осцилла или терминала.

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

Добавлено: Вт окт 02, 2012 04:29:18
vitalik_1984
Да точно и таким образом как раз можно прочитать из этого регистра.Первая отправка- ноги не замкнуты проверяем UDR нет сообщения
Вторая отправка - ноги замкнуты проверяем UDR сообщение должно быть на месте.

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

Добавлено: Вт окт 02, 2012 08:10:05
Prosperous
В терминале посмотрел, вроде передается :) спасибо за советы, возьму на вооружение )