Перейти к содержанию
    

это очень медленный интерфейс с огромных оверхедом

Это потрясающая новость! Можно сказать открытие!!!

Вообще то Ethernet и какая нибудь взятая Вами без разбору кривая реализация IP, есть РАЗНЫЕ вещи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так включите и это прерывание, одно другому не мешает.

так я не нашёл

 

в общем, попробую три варианта

если idle принимается каждым слейвом, независимо от текущего адреса, буду генерить его один раз в конце пакета

если idle относится только к текущему слейву, буду генерить его на каждый субпакет

если уж совсем ничего не поможет - придется дополнительно задействовать прерывание exti спаду сигнала data_valid, который я совсем упустил

 

SPI

синхронизироваться сложно

 

 

кривая

будете сравнивать вес uart c ethernet ?

Изменено пользователем Огурцов

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

это очень медленный интерфейс с огромных оверхедом

мне надо 62.5 килопакета в секунду, а на эзернете реально получается где-то 25, при 100% загрузке

и ещё его нет в бюджетных камнях

 

Опа! Что-то не то в датском королевстве :biggrin:

 

Что означает 62килопакета, в граммах - непонятно, пакет-то какой длины будет?? В езернете есть ограничения только на макс. длину, 64кб и минимальную, то-ли 64 байта или 48 не помню уже :laughing:

 

Причем вся обработка пакета, т.е. преамбула, CRC и т.д. делается самим контроллером, с дма и всякими плюшками...

 

И не путайте протокол(IP) и интерфейс. :rolleyes: Кстати, IP можно и по уарту гнать, как и просто пакеты по эзернету

 

В бюджетных камнях нет, только зачем 10 мегабит в бюджетке??

 

ЗЫ. И да, есть еще CAN. Тоже встроенный обработчик пакетов, приличные скорости...

Изменено пользователем mantech

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

дюжина байт войдёт

был бы ещё uart хотя бы на 25 мегабит - вообще супер

почему нет - кнопочку нажал, лампочку включил

а десятка - на камеру, при том, что физика общая, не тянуть же по зданию десятки линий

can == 1 мегабит, это очень небыстро

Изменено пользователем Огурцов

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

будете сравнивать вес uart c ethernet ?

Не умеете работотать с uart используейте ГОТОВЫЙ пакетный интерфейс. Размеры чипов не отличаются, как и их вес :)

 

 

минимальную, то-ли 64 байта или 48 не помню уже :laughing:

Зачастую и его можно обойти, причем совершено безболезненно при соединении точка-точка, где нет коллизий.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я бы сделал циклический буфер, заполняемый DMA, с прерыванием по наполовину заполненному буферу и таймаут на случай недостаточно длинного пакета. В приемнике обрабатывать как непрерывный поток.

Таймаут от прерывания таймера считать. Ну это очевидно.

 

Ну разумеется второе (вернее основное) назначение таймаута -- синхронизация на начало пакета.

 

Недостаток по сравнению с прерыванием на каждый принятый байт -- необходимость иметь более длинный таймаут. Без DMA на 115200 одной миллисекунды достаточно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

как наименьшими телодвижениями организовать приём пакетов ?

 

О, а у меня противоположный вопрос - как с наименьшими движениями организовать передачу по DMA из памяти в uart на lpc17xx.

Пример из code.bundle работает замечательно, но сцуко, только до 16 байт.

Пример из новейшего супер-пупер cmsis \lpc175x_6x_cmsis_driver_library\Examples\UART\DMA\uart_dma_test.c

вообще напрочь как-то не адаптируется под вариант "послать на uart3" - не происходит прерывания DMA_IRQ, хотя вроде бы всё такое же..

Может у кого есть работающий пример?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

синхронизироваться сложно

А вот вопрос - что это за бюджетный камень такой у STM позволяющий 10МБит/с по UART??? Озвучьте!

10 МБит/с - это ведь как минимум 160МГц тактовой на входе UART-периферии.

Или у Вас оверсэмплинг = 8? Но всё равно...

 

О, а у меня противоположный вопрос - как с наименьшими движениями организовать передачу по DMA из памяти в uart на lpc17xx.

А что именно вызывает затруднения? Поставить бит в SSP.DMACR и написать 5 строчек инициализации DMA-канала???

Подсказка: чтобы хоть что-то организовать, надо первым делом открыть даташит. Или этот шаг пропустили и сразу в примеры полезли?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 МБит/с - это ведь как минимум 160МГц тактовой на входе UART-периферии.

 

Разогнал наверно :biggrin:

 

ЗЫ. Вообще посмотрел соседнюю тему, товарищ Огурцов вообще интересными вещами занимается, например, езернет без мак контроллера, по спи... Так что 10 мег по уарту уже не удивляет :laughing:

 

Сам считаю, что для каждой задачи нужно свое решение, если нужен эзернет - так и надо брать мк с ним, а если мегабитные скорости - ИМХО уарт не для этого был разработан...

Изменено пользователем mantech

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ЗЫ. Вообще посмотрел соседнюю тему, товарищ Огурцов вообще интересными вещами занимается, например, езернет без мак контроллера, по спи... Так что 10 мег по уарту уже не удивляет :laughing:

Не занимается, а есть к русском языке хорошее слово - мается. Он еще на 100% умолчал, что ему все это "нужно" в количестве 999 точек на 9999 метров. В общем в обычном своем стиле :( писать что попало.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А что именно вызывает затруднения? Поставить бит в SSP.DMACR и написать 5 строчек инициализации DMA-канала???

Подсказка: чтобы хоть что-то организовать, надо первым делом открыть даташит. Или этот шаг пропустили и сразу в примеры полезли?

Зачем мне для передачи из памяти в uart ставить бит в SSP.DMACR ? нелогично вроде.

Кстати, SSP.DMACR - read/write регистр, а UnFCR, куда нужно писать соответствующие биты для DMA - write only, что придает некоторую сексуальность в сравнении "тут работает, тут не работает".

 

И на 5 строчек тоже как-то не хватает, но пофиг, пусть будет больше, лишь бы работало

/* зовем один раз */
  LPC_SC->PCONP |= (1 << 29);    /* Enable GPDMA clock */
  LPC_SC->DMAREQSEL = 0x0000;  /* Select primary function(UART0/1/2/3) in DMA channels,  secondary is timer 0/1/2/3. */
/*.....*/
/* str - строка для передачи в uart длиной len */
/* всё работает , если len <= 16, если больше - в порт уходит только 16 байт */
   DMA_Init( M2P, str, 0, len);
   LPC_GPDMACH0->DMACCConfig |= 0x08001|0x380;    /* Enable channel and IE bit */
/* [b]UPDATE[/b]: а так всё работает, как надо (chanel tranfer type был установлен в memory to memory)  */
   LPC_GPDMACH0->DMACCConfig |= 0x08001|0x380|(1<<11);    /* Enable channel and IE bit */
/*.....*/         

int DMA_Init( int DMAMode, char *src_addr, char *dest_addr, int dsize)
{
    if ( DMAMode == M2P ) {

      /* Ch0 set for M2P transfer from mempry to UART. */
      LPC_GPDMACH0->DMACCSrcAddr  = (uint32_t) src_addr;
      LPC_GPDMACH0->DMACCDestAddr = (uint32_t) LPC_UART3_BASE;

      /* The burst size is set to 1, source and dest transfer width is 32 bits(word), Terminal Count Int enable */
      LPC_GPDMACH0->DMACCControl = (dsize & 0x0FFF)|(0x00 << 12) |(0x00 << 15)
        |(0x00 << 18)|(0x00 << 21) | (1 << 26)| (0 << 27) | 0x80000000;
    }        
    LPC_GPDMA->DMACConfig = 0x01;    /* Enable DMA channels, little endian */
    while ( !(LPC_GPDMA->DMACConfig & 0x01) );    

   NVIC_EnableIRQ(DMA_IRQn);
   return (TRUE);
}

Изменено пользователем evgen2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Разогнал

нет, затормозил

 

10 мег по уарту

не только 10, в не самом бюджетном камне от 40..50 до 100 должно

ещё тут недавно тема была, про нейросети, точнее про сотни бюджетных камней на одной плате, как им общаться ?

 

если нужен эзернет

нам такой футбол не нужен http://electronix.ru/forum/index.php?showt...t&p=1402440

 

ИМХО уарт не для этого был разработан...

а для чего ? а для чего был телефон придуман, для adsl, наверно ?

Изменено пользователем Огурцов

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Зачем мне для передачи из памяти в uart ставить бит в SSP.DMACR ? нелогично вроде.

Кстати, SSP.DMACR - read/write регистр, а UnFCR, куда нужно писать соответствующие биты для DMA - write only, что придает некоторую сексуальность в сравнении "тут работает, тут не работает".

Фу-ты - конечно UART.FCR. Просто думал параллельно об SSP.

 

...

NVIC_EnableIRQ(DMA_IRQn);

А где установка регистра channel.config? А, вижу.

А где установка UART.FCR? И зачем |= для LPC_GPDMACH0->DMACCConfig?

 

Вот моя инициализация DMA для UART.tx (перед этим ещё устанавливается UART.FCR, SYSCFG.DMAREQSEL, DMA.SYNC и DMA.CFG):

static void SetTxDMA(void *data, uint n)
{
  DMA.IntTCClr = 1 << DMA_CH_bt;
  DMA.IntErrClr = 1 << DMA_CH_bt;
  HwRegsDMA::T_CH volatile *ch = &DMA.CH[DMA_CH_bt];
  ch->DST = (void *)&concatAB(UART, nUART_bt).THR;
  ch->SRC = data;
  ch->LLI = NULL;
  ch->CTL = n | 0 << 15 | B26 | B31;
  __DMB();
  ch->CFG = B0 | (DMA_REQ_bt_TX >> 4) << 6 | 1 << 11 | B14 | B15;
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот моя инициализация DMA для UART.tx (перед этим ещё устанавливается UART.FCR, SYSCFG.DMAREQSEL, DMA.SYNC и DMA.CFG):

  ch->CFG = B0 | (DMA_REQ_bt_TX >> 4) << 6 | 1 << 11 | B14 | B15;

Нашел.

Всё дело в волшебных пузырьках битиках. 1 << 11

Это transfer type. Если 0 - то memory to memory, если 1 - memory to peripheral. Если поставить 0, то всё работает до размера 16 байт (или, возможно, длины FIFO?, FIFO у меня 16 байт)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...