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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Чудеса с 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
bseyur
сообщение Jun 30 2010, 06:30
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 8-01-07
Из: Томск
Пользователь №: 24 208



Если я правильно понял, время отсчитывается по таймеру, а программа в это время ждет, пока с внешнего устройства поступит какой-то байт. Где тут чистота эксперимента?
Go to the top of the page
 
+Quote Post
evgen2
сообщение Jun 30 2010, 08:21
Сообщение #3


Местный
***

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



Цитата(bseyur @ Jun 30 2010, 10:30) *
Если я правильно понял, время отсчитывается по таймеру, а программа в это время ждет, пока с внешнего устройства поступит какой-то байт. Где тут чистота эксперимента?

Куда уж чище.
Внешнее устройство - lpc2148, разогнанный до 72 МГц
где крутится в цикле
if(U1LSR & 0x01)
{ v = U1RBR;
U1THR = v;
}
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jun 30 2010, 08:27
Сообщение #4


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Что говорит осциллограф?


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
evgen2
сообщение Jun 30 2010, 08:59
Сообщение #5


Местный
***

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



Цитата(GetSmart @ Jun 30 2010, 12:27) *
Что говорит осциллограф?


А что он может сказать ? Раньше смотрели, фронты слегка завалены, но что можно углядеть в ситуации, когда гоняется один байт туда-сюда в одном случае и гоняется, например, 8 байтов туда-сюда ?
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jun 30 2010, 09:06
Сообщение #6


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



ширина бита какая? паузы между байтами какие? паузы одинаковые ?


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
evgen2
сообщение Jun 30 2010, 09:08
Сообщение #7


Местный
***

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



Цитата(GetSmart @ Jun 30 2010, 13:06) *
ширина бита какая? паузы между байтами какие? паузы одинаковые ?

Я так понимаю, таки нужен осциллограф и картинки народу, ок. сейчас соберемся..
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jun 30 2010, 09:18
Сообщение #8


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Да, я народ biggrin.gif


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
bseyur
сообщение Jun 30 2010, 09:29
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 8-01-07
Из: Томск
Пользователь №: 24 208



Цитата(evgen2 @ Jun 30 2010, 15:21) *
Куда уж чище.
Внешнее устройство - lpc2148, разогнанный до 72 МГц
где крутится в цикле
if(U1LSR & 0x01)
{ v = U1RBR;
U1THR = v;
}

Попробуйте без ожидания приема.
Еще в приемо-передатчике есть фича, которая задерживает генерацию прерывания THRE при определенных условиях. Но не думаю, что это каким-то боком относится к делу. Просто мысли... rolleyes.gif
Go to the top of the page
 
+Quote Post
evgen2
сообщение Jun 30 2010, 17:26
Сообщение #10


Местный
***

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



Цитата(bseyur @ Jun 30 2010, 13:29) *
Попробуйте без ожидания приема.
Еще в приемо-передатчике есть фича, которая задерживает генерацию прерывания THRE при определенных условиях. Но не думаю, что это каким-то боком относится к делу. Просто мысли... rolleyes.gif


Прерываний никаких нет. Но мысли в правильном направлении..
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 30 2010, 17:49
Сообщение #11


Гуру
******

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


Местный
***

Группа: Участник
Сообщений: 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
Сообщение #13


Гуру
******

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


Местный
***

Группа: Участник
Сообщений: 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
Сообщение #15


Гуру
******

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

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

 


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


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