Инициализирую UART в меге следующим кодом:
Код: Выделить всё
USART_init(103);//Скорость 9600 при кварце 16 Мгц и U2X = 0
void USART_init(uint16_t ubrr_value)
{
//Устанавливаем скорость передачи
UBRRL=ubrr_value;
UBRRH=(ubrr_value>>8);
//Режим (регистр UCSRC):
//Асинхронная передача UMSEL0=0; UMSEL1=0;
cbi(UCSRC, UMSEL);
//размер символа данных 8 бит: UCSZ0=1; UCSZ1=1;
sbi(UCSRC, UCSZ0);
sbi(UCSRC, UCSZ1);
//Один стоп-бит USBS=0;
cbi(UCSRC, USBS);
//Контроль чётности отключен UPM0=0; UPM1=0;
cbi(UCSRC, UPM0);
cbi(UCSRC, UPM1);
//Нарастающий фронт сигнала XCK (на выводе TxD, ниспадающий фронт на выводе RxD) UCPOL=0;
cbi(UCSRC, UCPOL);
//Разрешаем приём и передачу (регистр UCSRB)
sbi(UCSRB, RXEN);
sbi(UCSRB, TXEN);
}
Скорость порта в CP2102 управляется виндой:
"The data format and baud rate programmed into the UART is set during COM port configuration on the PC."
Соответственно, в настройках порта в винде стиавлю скорость 9600, кадр 8 бит, 1 стоп-бит, чётности нет, Флоу контрол тоже "нет".
Включаю всё. Запускаю PuTTY, прописываю настройки аналогичные настройкам порта в винде. Результат - ноль.
Начинаю думать. Вижу что Атмега дёргает ногой (по изменению напряжения, скопа нет), тут нормально.
Порт активируется при запуске PuTTY, светодиод горит, тут тоже всё Ок. Смотрю под лупой на ноги CP2102 и на дорожки - непропая визуально не вижу. Начинаю уменьшать скорость порта в PuTTY, что-то начинает появляться. Дохожу до 600 бод, всё приходит в норму.
Но 600 это не 9600, которые я ожидал. Проверил инициализацию в Атмеге - ошибок не нашёл. Кварц внешний, задержки формируются правильно, а скорость не та.
Подскажите, где может быть затык?

