Доброго времени суток! Возникла у меня одна проблемка, а вы тут коты ученые, может чего подскажите.
Есть следующий код:
Спойлер
#include <avr/io.h>
void Сonfig()
{
UCSR1A = 0;
UCSR1B = (1 << RXEN1) | (1 << TXEN1);
UCSR1C = (1 << UCSZ11) | (1 << UCSZ10);
UBRR1H = 0;
UBRR1L = 103;
}
void Delay(unsigned int timer)
{
unsigned int tmp = 1600;
while(timer--)
{
while(tmp--);
tmp = 1600;
}
}
void UARTTransmitWord(unsigned char text[])
{
unsigned char count = 0;
while(text[count])
{
while(!(UCSR1A & (1 << UDRE1)));
UDR1 = text[count++];
}
}
int main(void)
{
Сonfig();
while(1)
{
UARTTransmitWord((unsigned char*)"Hello world!\x0D");
Delay(500);
}
}Был мной проверен на atmega8, atmega 328, atmega1284, atmega128 и с незначительной переработкой кода работает также на STM32F103C8T6. Проблем никогда не возникало. Но вот мне пришла из Китая Arduino Mega 2560 на которой этот код не работает должным образом. То есть в терминале я должен был получить следующие байты: 48 65 6C 6C 6F 20 77 6F 72 6C 64 21 0D а получаю это: FF FF FF FF FF FF FF FF FF FF FF FF
Код пишу в Atmel Studio и CodeVisionAVR, результат везде одинаков. Перепробовал все все выходы с USART0 по USART3, везде одно и то же. Причем в Proteus все нормально работает, а вот на реальном железе ничего не выходит. Подключенный осциллограф показал всё то же самое. Стартовый и стоповый биты проходят, а данные нет.
Подозрения также были на неправильно высчитанную скорость обмена данными, но следующий код опроверг эти подозрения. Он работает как в Proteus так и на реальном железе, выводя последовательность чисел от 0x00 до 0xFF.
Спойлер
#include <avr/io.h>
void Config()
{
UCSR1A = 0;
UCSR1B = (1 << RXEN1) | (1 << TXEN1);
UCSR1C = (1 << UCSZ11) | (1 << UCSZ10);
UBRR1H = 0;
UBRR1L = 103;
}
void Delay(unsigned int timer)
{
unsigned int tmp = 1600;
while(timer--)
{
while(tmp--);
tmp = 1600;
}
}
void UARTTransmitByte(unsigned char byte)
{
while(!(UCSR1A & (1 << UDRE1)));
UDR1 = byte;
}
int main(void)
{
Config();
unsigned char count = 0;
while(1)
{
UARTTransmitByte(count++);
Delay(500);
}
}Мистика какая то.. Хотя, может это я криворукий