|
Какова "реальная" скорость UART? |
|
|
|
Jun 2 2008, 23:15
|
Местный
  
Группа: Свой
Сообщений: 222
Регистрация: 2-12-06
Из: г. Хабаровск
Пользователь №: 23 035

|
Здравствуйте! Стояла задача добиться максимальной скорости обмена по UART в Atmega128. Со стороны мк была написана небольшая програмка для измерения скорости обмена. Передача осуществляется в режиме прерывания. Код #define TX_BUFFER_SIZE 128 char tx_buffer[TX_BUFFER_SIZE];
#if TX_BUFFER_SIZE<256 unsigned char tx_wr_index,tx_rd_index,tx_counter; #else unsigned int tx_wr_index,tx_rd_index,tx_counter; #endif
// USART0 Transmitter interrupt service routine interrupt [USART0_TXC] void usart0_tx_isr(void) { if (tx_counter) { --tx_counter; UDR0 = tx_buffer[tx_rd_index]; if (++tx_rd_index == TX_BUFFER_SIZE) tx_rd_index=0; }; }
// Write a character to the USART0 Transmitter buffer #pragma used+ int COM_putchar(unsigned char c) { while (tx_counter == TX_BUFFER_SIZE); #asm("cli") if (tx_counter || ((UCSR0A & DATA_REGISTER_EMPTY)==0)) { tx_buffer[tx_wr_index]=c; if (++tx_wr_index == TX_BUFFER_SIZE) { tx_wr_index=0; } ++tx_counter; } else UDR0=c; #asm("sei") return 1;//<! }
в main:
unsigned long int tx_cnt; // счётчик переданных байт _включили_таймер if( ++tx_cnt < 65535 ) { COM_putchar(0x55); } _остановили_таймер В теории скорость передачи BAUD = 115200 бит/с. Передаём один старт-бит, 8 бит данных, один стоп-бит, итого 10 бит на передачу одного байта данных. На деле получаю: передано 65535 байт; время: 6,2с. Считаем BAUD: 65535*10/6,2 = 105702 бит/с. Не дотягивает передатчик до любой из стандартных скоростей, которую я выбирал. Может так и должно быть? Или стоит искать ошибки программы?
Сообщение отредактировал altlogic - Jun 2 2008, 23:17
--------------------
|
|
|
|
|
 |
Ответов
|
Jun 3 2008, 04:54
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(MrYuran @ Jun 3 2008, 08:04)  на самом деле 11. забыли бит четности. Если проверка на четность не включена, это ещё не значит, что бит не передаётся. Это, ИМХО, из разряда гадания на кофейной гуще. Код инициализации мы не видели. Цитата(altlogic @ Jun 3 2008, 08:45)  мк сбрасывается при передаче семи символов. Может надо было не только объявление прерывания поменять?.. Разрешение TXC убрали? С точки зрения обработки разница только в том, что DRE активно еще до начала передачи.
|
|
|
|
Сообщений в этой теме
altlogic Какова "реальная" скорость UART? Jun 2 2008, 23:15 repairDV Цитата(altlogic @ Jun 3 2008, 10:15) Не ... Jun 3 2008, 00:50 altlogic Цитата(repairDV @ Jun 3 2008, 11:50) Да, ... Jun 3 2008, 01:12  repairDV Цитата(altlogic @ Jun 3 2008, 12:12) бит ... Jun 3 2008, 02:58 aaarrr Цитата(altlogic @ Jun 3 2008, 03:15) Не ... Jun 3 2008, 03:03 altlogic Цитата(repairDV @ Jun 3 2008, 13:58) Тут,... Jun 3 2008, 03:14 MrYuran Цитата(altlogic @ Jun 3 2008, 03:15) В те... Jun 3 2008, 04:04 altlogic Цитата(MrYuran @ Jun 3 2008, 15:04) на са... Jun 3 2008, 04:45 LeonY Цитата(MrYuran @ Jun 3 2008, 06:04) на са... Jun 3 2008, 22:37 Палыч Цитата(altlogic @ Jun 3 2008, 02:15) Стоя... Jun 3 2008, 06:00 altlogic Цитата(aaarrr @ Jun 3 2008, 15:54) Код ин... Jun 3 2008, 07:15 Палыч По-моему, Вам уже всё обьяснили... Или остались во... Jun 3 2008, 07:56 lolful Я наверно скажу глупость, но мне всегда казалось, ... Jun 3 2008, 17:49 aaarrr Ересь
Стартовый бит всегда один, количество стопо... Jun 3 2008, 17:59 altlogic Всем участникам спасибо! Сегодня утром на свеж... Jun 3 2008, 21:53 aaarrr Цитата(altlogic @ Jun 4 2008, 01:53) Вот ... Jun 4 2008, 09:45  Dog Pawlowa Цитата(aaarrr @ Jun 4 2008, 12:45) Провер... Jun 4 2008, 10:38   aaarrr Цитата(Dog Pawlowa @ Jun 4 2008, 14:38) Т... Jun 4 2008, 10:48    Dog Pawlowa Цитата(aaarrr @ Jun 4 2008, 13:48) Ага, с... Jun 4 2008, 11:20  altlogic Цитата(aaarrr @ Jun 4 2008, 20:45) Провер... Jun 4 2008, 12:14 DpInRock Бит четности не передается, если четность не включ... Jun 4 2008, 03:48 WHALE а зачем 2 индекса-rx_wr_index1 и rx_counter1? Jun 4 2008, 05:54 altlogic Там вообще три переменных под индексы: rx_wr_index... Jun 4 2008, 07:02 aaarrr Ну, если специально придумать плохой протокол и до... Jun 4 2008, 11:51 DpInRock Протокол верхнего уровня, это когда вы принятую ст... Jun 5 2008, 10:37 altlogic Что-то просел я с реализацией RTS/CTS протокола. Н... Jun 5 2008, 11:35 aaarrr Цитата(altlogic @ Jun 5 2008, 15:35)
Ко... Jun 5 2008, 13:02  altlogic Спасибо, теперь вроде ничего не теряю Только я не ... Jun 5 2008, 13:40 aaarrr Да, при входе в прерывание прерывания запрещаются ... Jun 5 2008, 13:54
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|