|
|
  |
1 Мбит на USART Atmega128, как добиться большой скорости |
|
|
|
Mar 4 2010, 12:10
|
Участник

Группа: Участник
Сообщений: 70
Регистрация: 5-04-07
Из: Санкт-Петербург
Пользователь №: 26 789

|
Усть вопрос - как добиться скорости 1 Мбит на USART для Atmega128? В соответствии с документацией подключил кварц 16 Мгц - выставил все параметры - установил фуз CKOPT. Добиться скорости 1 Мбит не удалось. на 500 кбит работает с кучей ошибок. 250 кбит - не работает. Стабильно только на 76800. К компьютеру подключен через чип USB to UART Bridge с поддержко USB 2.0
|
|
|
|
|
Mar 4 2010, 12:24
|
Участник

Группа: Участник
Сообщений: 70
Регистрация: 5-04-07
Из: Санкт-Петербург
Пользователь №: 26 789

|
Цитата(V_N @ Mar 4 2010, 15:18)  Покажите код инициализации USART // USART1 initialization // Communication Parameters: 8 Data, 1 Stop, Even Parity // USART1 Receiver: On // USART1 Transmitter: On // USART1 Mode: Asynchronous // USART1 Baud Rate: 1 000 000 UCSR1A=0x00; UCSR1B=0xD8; // RX и TX включение и прерывания UCSR1C=0x26; UBRR1H=0x00; UBRR1L=0x00; На чипе еще реализованы МЭК-101 и еще куча кода в 2 -х прерываниях от таймеров - может не успевает обработать.
|
|
|
|
|
Mar 4 2010, 12:41
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(aaarrr @ Mar 4 2010, 15:17)  Надо выяснять, может ли работать переходник на такой нестандартной скорости. Ну это легко посмотреть осцилом. А ещё стоит посмотреть исходник, как там байты ловятся. Есть вероятность, что пропуски идут. Хотя, 16х11 тактов вроде должно хватить
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Mar 4 2010, 13:09
|
Местный
  
Группа: Свой
Сообщений: 426
Регистрация: 5-04-07
Из: Санкт-Петербург
Пользователь №: 26 782

|
Цитата(Tcom @ Mar 4 2010, 15:19)  Тактовая частота должна быть кратна скорости обмена по UART. Есть в ДШ табличка с ошибками. U2X = 0 и UBRR=0 должно ровняться скорости 1М
А если включить перемычку TX + RX в USB to UART Bridge с поддержкой USB 2.0 то нормально работает? Приммер инициализации USART1 для м128 на 1МГц, работает без ошибок, кварц 16МГц Код //------------ Инициализация USART1 -----------------------
void MonitorUART :: InitUSART1 (ULONG baudrate, char frame, char stopbits ) { UCSR1B = (1<<RXEN1)|(1<<TXEN1); // Количество стоп битов if ( stopbits == 1) UCSR1C &= ~(1<<USBS1); // 1 bit else UCSR1C |= (1<<USBS1); //2 bit //Устанавливаем фрэйм UCSR1B &= ~(1<<UCSZ12); char tmp = 0; switch (frame) { case 5: tmp = ~(1<<UCSZ10); tmp &= ~(1<<UCSZ11); UCSR1C = tmp; break; case 6: tmp |= (1<<UCSZ10); tmp &= ~(1<<UCSZ11); UCSR1C = tmp; break; case 7: tmp |= (1<<UCSZ11); tmp &= ~(1<<UCSZ10); UCSR1C = tmp; break; case 8: UCSR1C |= (1<<UCSZ10)|(1<<UCSZ11); break; default: UCSR1C |= (1<<UCSZ10)|(1<<UCSZ11); break; } // Скорость обмена UINT ubrr = CPU_F_Hz/ ( 16UL*baudrate) -1; UBRR1L = (char) ubrr; UBRR1H = ubrr>>8; // Разрешаем прерывания RxcIntEnable (); TxcIntEnable (); }
|
|
|
|
|
Mar 9 2010, 12:58
|
Частый гость
 
Группа: Свой
Сообщений: 187
Регистрация: 22-06-05
Из: Минск, Беларусь
Пользователь №: 6 213

|
MrYuran, действительно я тормознул, привык, что UART-ы используются с корявыми делителями для получения скорости.
Ну а для работы 1 Мбитом могу сказать, что скорость для UART-а очень капризная и требовательная, как к длине кабеля, так и к занятости процессора. Возможно он просто не справляется с обработкой данных, поступающей с такой скоростью через UART. При приеме данных, каждый новый байт будет приходить примерно 1 раз в 10 мкс, поэтому процессор должен быть максимально свободен, чтобы успевать обрабатывать с такой скоростью.
|
|
|
|
|
Mar 9 2010, 13:18
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Yaumen @ Mar 9 2010, 15:58)  UART-ы используются с корявыми делителями для получения скорости. Ага, и по этой причине на встречной стороне от USB->UART переходника мегабит не получится. 9216000 например, получится.... Возможность других частот - тут уже надо изучать, как железо конкретного чипа, так и его драйвера,
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|