Цитата(AlexandrY @ Dec 14 2016, 11:47)

Вы наверно перепутали с Linked List DMA или Linked DMA как в Gecko.
Нет, в Kinetis это нечто иное. Смотрите мануал.
Я имел в виду именно "Linked List" - свЯзные списки. В LPC. В Tiva тоже подобный есть.
С EFM32 не имею опыта.
Цитата(Сергей Борщ @ Dec 15 2016, 09:46)

Простите, а что мешает при переходе через конец буфера первой посылкой отправлять данные от текущего положения до конца буфера, а по следующему запросу отдавать уже от начала буфера? Я так в УАСПП через ПДП отправляю и VCP у меня так же работает.
Я так тоже делаю. Но тут надо умнее рассчитывать размер очередной передачи. Чтобы не оказалось, что в очередной передаче нужно передать всего один байт.

Цитата(Valentine Loginov @ Dec 15 2016, 11:28)

Запрещать прерывание во время работы с буфером из основного приложения. Но это некрасиво.
Если хочется, то можно и без запрета прерываний.
Как тут уже предложил
zltigo: иметь кольцевой буфер не в виде просто массива байт, а в виде массива указателей на блоки с массивами байт.
Функция, которая хочет записать данные в такой буфер, из некоего пула свободных блоков получает блок, записывает свои данные туда, формирует заголовок блока и помещает этот блок в кольцевую очередь при помощи LDREX/STREX.
Я обычно так строю очереди для межпоточных передач данных под виндой. Без семафоров и критических секций, на семействе функций InterlockedExchange...().
Цитата(AlexandrY @ Dec 15 2016, 16:24)

Выглядит не очень разумно каждый сэмпл на I2S делать прерывание.
Но даже так, 3 мкс на прерывание в котором только пересылка это подозрительно много. Может прерывание RTOS используете?
К гадалке не ходи - на каждое прерывание дёргает отправку сообщений какому-то объекту синхронизации ОС .
Совершенно безграмотная организация работы! На пустом месте тратится огромная часть времени процессора.
Какой смысл дёргать ОС так часто???