реклама на сайте
подробности

 
 
> Какова "реальная" скорость UART?
altlogic
сообщение Jun 2 2008, 23:15
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 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


--------------------
С уважением, Вячеслав
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
aaarrr
сообщение Jun 3 2008, 04:54
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(MrYuran @ Jun 3 2008, 08:04) *
на самом деле 11.
забыли бит четности. Если проверка на четность не включена, это ещё не значит, что бит не передаётся.

Это, ИМХО, из разряда гадания на кофейной гуще. Код инициализации мы не видели.

Цитата(altlogic @ Jun 3 2008, 08:45) *
мк сбрасывается при передаче семи символов. Может надо было не только объявление прерывания поменять?..

Разрешение TXC убрали?

С точки зрения обработки разница только в том, что DRE активно еще до начала передачи.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 22:27
Рейтинг@Mail.ru


Страница сгенерированна за 0.01379 секунд с 7
ELECTRONIX ©2004-2016