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

 
 
> Чудеса с UART'ом
evgen2
сообщение Jun 29 2010, 23:28
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 236
Регистрация: 1-04-06
Пользователь №: 15 688



Работаю c UART'ом.. на lpc2378 на максимальной скорости и чего-то с временами не то...
Частота UART'а = 4500000, т.е. по идее это 2.2 мкс на передачу одного байта
Сделал тест. С одной стороны
Код
  for(;;)
  {      t0 = T1TC;
      while (!(U3LSR & 0x20));
         U3THR = v;
      while (!(U3LSR & 0x01));
      a = U3RBR;
      dt  = T1TC - t0;
  }


с другой стороны - тупое эхо. Меряю время - получается 7 микросекунд, вместо 2.2 *2
если же выдавать не по одному байту, то измеренное время в расчете на байт уменьшается, приближаясь к рачетному.

FIFO вроде бы тут никак не должно играть. Разве только в случае незаполненого FIFO на передачу, это самое FIFO некоторое время ждет. В документации ни про какое торможение вроде не написано.

Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
zltigo
сообщение Jun 30 2010, 17:49
Сообщение #2


Гуру
******

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



QUOTE (evgen2 @ Jun 30 2010, 02:28) *
FIFO вроде бы тут никак не должно играть.

Приемное FIFO работает по таймауту, иначе если готовность/прерывание будут дергаться после первого-же байта в FIFO смысла мало. Хотите шустрости на одиночных байтах - отключайте FIFIO.
QUOTE
Внешнее устройство - lpc2148, разогнанный до 72 МГц
где крутится в цикле

А должна быть просто перемычка.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
evgen2
сообщение Jun 30 2010, 18:46
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 236
Регистрация: 1-04-06
Пользователь №: 15 688



Цитата(zltigo @ Jun 30 2010, 21:49) *
Приемное FIFO работает по таймауту, иначе если готовность/прерывание будут дергаться после первого-же байта в FIFO смысла мало. Хотите шустрости на одиночных байтах - отключайте FIFIO.

А должна быть просто перемычка.

Дык в даташите написано - "низя отдключать FIFO". хочется шустрости, но не на совсем одиночных байтах, например три байта туда, три обратно. Вот стал выяснять, где тормозит.

Чего-то я не понимаю, как тут вставлять картинки.

http://electronix.ru/mkportal/modules/copp...&fullsize=1
Это сигналы RX и TX
Долго не могли сообразить, что можно дрыгать ногами, после дрыганья ногами стало более-менее понятно

http://electronix.ru/mkportal/modules/copp...&fullsize=1
Это слейв 2148, сверху вход, снизу дрыг ногой


http://electronix.ru/mkportal/modules/copp...&fullsize=1
Это слейв 2148, сверху вЫход, снизу дрыг ногой

http://electronix.ru/mkportal/modules/copp...&fullsize=1
Мастер 2378 сверху вход, снизу - дрыг

http://electronix.ru/mkportal/modules/copp...&fullsize=1
Мастер 2378 сверху вЫход, снизу - дрыг

код для слейва

Код
#define LAMP_ON        FIO0SET = 0x00002000    
#define LAMP_OFF    FIO0CLR = 0x00002000    

   while(1)
   {
        if(U1LSR & 0x01)
        {   LAMP_ON;
             v = U1RBR;
            U1THR = v;
            LAMP_OFF;
    }
   }


код для мастера

Код
  
for(;;)
  {    
      U3THR = v;
      LAMP_OFF;
     while (!(U3LSR & 0x01));
        LAMP_ON;  /*  нога on */
      a = U3RBR;
          U3THR = v;
        LAMP_OFF; /*  нога off */

     while (!(U3LSR & 0x01));
        LAMP_ON;
      a = U3RBR;
          U3THR = v;
        LAMP_OFF;
/* повторение много раз, чтоб съесть затраты на цикл */
....
}


Непонятно, почему время дрыга для одного и того же кода так отличается. Оптимизация по времени во обоих случаях включена.

Сообщение отредактировал evgen2 - Jun 30 2010, 18:47
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 30 2010, 18:53
Сообщение #4


Гуру
******

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



QUOTE (evgen2 @ Jun 30 2010, 20:14) *
Дык в даташите написано - "низя отдключать FIFO".

Привидилось???



--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
evgen2
сообщение Jun 30 2010, 19:43
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 236
Регистрация: 1-04-06
Пользователь №: 15 688



Цитата(zltigo @ Jun 30 2010, 22:53) *
Привидилось???

Окей, не в даташите, а в узермануале

UARTn FIFO Control Register (U0FCR - 0xE000C008, U2FCR -

Table 311: UARTn FIFO Control Register (U0FCR - address 0xE000C008,
U2FCR - 0xE007 8008, U3FCR - 0xE007C008, Write Only) bit description

Bit Symbol Value Description Reset Value
0 FIFO Enable 0 UARTn FIFOs are disabled. Must not be used in the 0
application.
1 Active high enable for both UARTn Rx and TX
FIFOs and UnFCR[7:1] access. This bit must be set
for proper UARTn operation.
Any transition on this
bit will automatically clear the UARTn FIFOs.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 30 2010, 22:05
Сообщение #6


Гуру
******

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



QUOTE (evgen2 @ Jun 30 2010, 21:43) *
This bit must be set for proper UARTn operation.

Чрезмерно узкая трактовка слова proper. Отключайте, если уверены, что будете успевать работать без буферизации.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
evgen2
сообщение Jun 30 2010, 22:38
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 236
Регистрация: 1-04-06
Пользователь №: 15 688



Цитата(zltigo @ Jul 1 2010, 02:05) *
Чрезмерно узкая трактовка слова proper. Отключайте, если уверены, что будете успевать работать без буферизации.


в тесте - будет, в боевых условиях - нет.
В принципе я выяснил, что есть задержка порядка 0.5 микросекунд на приеме одиночного байта или первого байта - хотя бы буду про это знать и помнить при расчетах.
---
Вот у меня зуб точится, чтоб убрать
while (!(U3LSR & 0x20));
при посылке порций, меньше размера буфера FIFO, но проведенные экперименты показывают, что так - не работает.
А код для этого while достаточно большой и добавляет тормозов.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- evgen2   Чудеса с UART'ом   Jun 29 2010, 23:28
- - bseyur   Если я правильно понял, время отсчитывается по тай...   Jun 30 2010, 06:30
|- - evgen2   Цитата(bseyur @ Jun 30 2010, 10:30) Если ...   Jun 30 2010, 08:21
|- - bseyur   Цитата(evgen2 @ Jun 30 2010, 15:21) Куда ...   Jun 30 2010, 09:29
|- - evgen2   Цитата(bseyur @ Jun 30 2010, 13:29) Попро...   Jun 30 2010, 17:26
- - GetSmart   Что говорит осциллограф?   Jun 30 2010, 08:27
|- - evgen2   Цитата(GetSmart @ Jun 30 2010, 12:27) Что...   Jun 30 2010, 08:59
- - GetSmart   ширина бита какая? паузы между байтами какие? пауз...   Jun 30 2010, 09:06
|- - evgen2   Цитата(GetSmart @ Jun 30 2010, 13:06) шир...   Jun 30 2010, 09:08
- - GetSmart   Да, я народ   Jun 30 2010, 09:18
|- - zltigo   QUOTE (evgen2 @ Jul 1 2010, 00:38) при по...   Jul 1 2010, 05:32
- - GetSmart   Картинки с осцилла вполне нормальные. Бодрейт верн...   Jul 1 2010, 06:01
- - evgen2   Цитата(GetSmart @ Jul 1 2010, 10:01) FIFO...   Jul 1 2010, 07:36
- - singlskv   Цитата(evgen2 @ Jul 1 2010, 11:36) Мысль ...   Jul 1 2010, 19:46


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

 


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


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