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

 
 
> Сколько байт можно гарантированно запихивать в UART LPC (UART0 LPC2292) по прерыванию THRE?, Видимо 16
Alex03
сообщение Oct 11 2006, 05:38
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 359
Регистрация: 9-12-05
Пользователь №: 12 034



Будем считать что процедура записи в U0THR мгновеная, а скорость передачи сверхнизкая, т.е. байты улетать не успевают smile.gif

16? Или если ещё и LST_TEMP=1 (но это вряд ли) то и 17?

PS Гады. Ну реализовали они 550 UART но могли бы расширить флагами для статуса FIFO, а то и прерыванием по окончанию передачи из сдвигового регистра.
PPS FIFO понятно включен.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
zltigo
сообщение Oct 11 2006, 06:17
Сообщение #2


Гуру
******

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



Цитата(Alex03 @ Oct 11 2006, 08:38) *
16? Или если ещё и LST_TEMP=1 (но это вряд ли) то и 17?

Естествено 16, поскольку мгновенным ничего не бывает, и скорость передачи не бесконечно низкая, то и пока будете 16 запихивать первый уже в сдвиговый регистр в большинстве реальных приложений попадет, значит 17. 17-тым не пользуюсь, а 16 загружаю.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Alex03
сообщение Oct 11 2006, 07:29
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 359
Регистрация: 9-12-05
Пользователь №: 12 034



Цитата(zltigo @ Oct 11 2006, 12:17) *
Естествено 16, поскольку мгновенным ничего не бывает, и скорость передачи не бесконечно низкая, то и пока будете 16 запихивать первый уже в сдвиговый регистр в большинстве реальных приложений попадет, значит 17. 17-тым не пользуюсь, а 16 загружаю.


17 - пожалуй перебор.
Такой ситуации практически не бывает на относительно невысоких скоростях передачи.
Время передачи одного/двух бит (стоповый бит) или 7..11 бит (целого слова) часто довольно большое.
Например для B9600 м.б. ~100..1100мкс.
Да и на макс. скорости для 8N1 у проца есть 10*16 тактов, что вполне соизмеримо с временем записи 16 байтиков в U0THR с учётом хорошей оптимизации, задержек на ISR и тормознутой переферии.

А смутил меня попавшийся в двух примерах такой (псевдо)код в ISR:
Код
while (U0LSR & ULSR_THRE)
{
    U0THR = uart0_tx_buffer[uart0_tx_extract_idx++];
}


Т.е. они там по одному (в лучшем случае два) байту за прерывание отправляли, при активированном FIFO.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 11 2006, 10:24
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Alex03 @ Oct 11 2006, 10:29) *
А смутил меня попавшийся в двух примерах такой (псевдо)код в ISR:
Код
while (U0LSR & ULSR_THRE)
{
    U0THR = uart0_tx_buffer[uart0_tx_extract_idx++];
}


Т.е. они там по одному (в лучшем случае два) байту за прерывание отправляли, при активированном FIFO.
Ну почему же один? U0LSR читается на каждом проходе цикла, пока FIFO не заполнится ULSR_THRE равен 1 и цикл будет выполняться. Т.е. 16-17 легко.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Alex03
сообщение Oct 11 2006, 10:38
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 359
Регистрация: 9-12-05
Пользователь №: 12 034



Цитата(Сергей Борщ @ Oct 11 2006, 16:24) *
Ну почему же один? U0LSR читается на каждом проходе цикла, пока FIFO не заполнится ULSR_THRE равен 1 и цикл будет выполняться. Т.е. 16-17 легко.


Вот видимо те авторы так-же думали.

THRE - Transmitter Holding Register Empty
0: U0THR contains valid data.
1: U0THR is empty.
THRE is set immediately upon detection of an empty UART0 THR and is cleared on a U0THR write.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Alex03   Сколько байт можно гарантированно запихивать в UART LPC (UART0 LPC2292) по прерыванию THRE?   Oct 11 2006, 05:38
|- - Сергей Борщ   Цитата(Alex03 @ Oct 11 2006, 13:38) Цитат...   Oct 11 2006, 14:43
|- - Alex03   Цитата(Сергей Борщ @ Oct 11 2006, 20:43) ...   Oct 12 2006, 03:18
|- - Сергей Борщ   Цитата(Alex03 @ Oct 12 2006, 06:18) Цитат...   Oct 12 2006, 07:09
||- - Alex03   Цитата(Сергей Борщ @ Oct 12 2006, 13:09) ...   Oct 12 2006, 08:49
||- - zltigo   Цитата(Alex03 @ Oct 12 2006, 11:49) А tbu...   Oct 12 2006, 12:01
||- - Alex03   Цитата(zltigo @ Oct 12 2006, 18:01) Сравн...   Oct 12 2006, 12:41
||- - zltigo   Цитата(Alex03 @ Oct 12 2006, 15:41) В как...   Oct 12 2006, 12:55
||- - Alex03   Цитата(zltigo @ Oct 12 2006, 18:55) Цитат...   Oct 13 2006, 07:37
||- - zltigo   Цитата(Alex03 @ Oct 13 2006, 10:37) Не по...   Oct 13 2006, 07:58
||- - Alex03   Цитата(zltigo @ Oct 13 2006, 13:58) В рас...   Oct 13 2006, 08:54
||- - zltigo   Цитата(Alex03 @ Oct 13 2006, 11:54) Если ...   Oct 13 2006, 09:29
|- - Сергей Борщ   Цитата(Alex03 @ Oct 12 2006, 06:18) Вы ж ...   Oct 13 2006, 12:20
|- - zltigo   Цитата(Сергей Борщ @ Oct 13 2006, 15:20) ...   Oct 13 2006, 15:06
- - zltigo   Код__irq __arm void uart_isr( void ) { reg...   Oct 12 2006, 06:52


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

 


RSS Текстовая версия Сейчас: 20th June 2025 - 02:54
Рейтинг@Mail.ru


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