Racemaniac
Пт 22 апреля 2016 г., 18:55
Просто маленький мозг, который я хотел опубликовать здесь . Я хотел посмотреть, как быстро DMA может управлять портами, поэтому я настроил память DMA на передачу памяти в регистр GPIO BSRR. Результатом является переключение PIN 11 при почти 4 МГц, но вы можете управлять всем портом (все 16 контактов) на этой скорости с переносом .
Мне было интересно о быстрых способах вывода параллельных данных, и попробовал это .
Мне было интересно о быстрых способах вывода параллельных данных, и попробовал это .
#include
uint32_t toggle[1000];
void setup()
{
pinMode(11, OUTPUT);
pinMode(33, OUTPUT);
pinMode(32, INPUT);
for(int i = 0; i < 1000; i++)
toggle[i] = i%2 ? 0x00010000 : 0x00000001;
while(!digitalRead(32)); //it waits until you press the maple mini button
dmaTransfer(toggle, (uint32_t*)&GPIOA->regs->BSRR, 1000);
}
void loop()
{
}
void dmaTransfer(uint32_t* from, uint32_t* to, uint32_t dataLength)
{
dma_init(DMA1);
dma_setup_transfer(DMA1, DMA_CH1, from, DMA_SIZE_32BITS, to, DMA_SIZE_32BITS, DMA_PINC_MODE | DMA_MEM_2_MEM);
dma_set_num_transfers(DMA1, DMA_CH1, dataLength);
dma_enable(DMA1, DMA_CH1);
}
Мадиас
Пт 22 апреля 2016 г., 19:29
Был бы интересным проектом по созданию 16-битного параллельного дисплеев, управляемого портом DMA. Но я предполагаю, что на рынке дешевого рынка нет 16-битных дисплеев, которые поддерживают 4 МГц
Но вы можете построить 16-битный разделитель резисторного разделителя с такой скоростью, что вы не получите точные 16-битные с сетью разделителей резисторов в доме.
Но вы можете построить 16-битный разделитель резисторного разделителя с такой скоростью, что вы не получите точные 16-битные с сетью разделителей резисторов в доме.
Werecatf
Пт 22 апреля 2016 г., 19:41
Мадиас написал:Был бы интересным проектом по созданию 16-битного параллельного дисплеев, управляемого портом DMA. Но я предполагаю, что на рынке дешевого рынка нет 16-битных дисплеев, которые поддерживают 4 МГц
Мадиас
Пт 22 апреля 2016 г., 8:46 вечера
WereCatf написал:
ILI9341-это дешево, и он поддерживает 16-битный параллельный интерфейс, но я не знаю, как на самом деле управлять одним или чем-то еще.
Werecatf
Пт 22 апреля 2016 г., 21:21
Мадиас написал:Но я не вижу «реального применения» для супер высокоскоростной TFT на STMF1.
Martinayotte
Пт 22 апреля 2016 г., 21:37
Просто потому, что именно процессор знает, что нарисовать.
Наличие некоторого DMA для передачи чего -либо означает, что данные поступают из кадровую буфер:
Давайте говорит, что экран 320x480 с RGB24 = 460K ОЗУ.
Наличие некоторого DMA для передачи чего -либо означает, что данные поступают из кадровую буфер:
Давайте говорит, что экран 320x480 с RGB24 = 460K ОЗУ.
Werecatf
Пт 22 апреля 2016 г., 22:12
Martinayotte написал:Просто потому, что именно процессор знает, что нарисовать.
Наличие некоторого DMA для передачи чего -либо означает, что данные поступают из кадровую буфер:
Давайте говорит, что экран 320x480 с RGB24 = 460K ОЗУ.
Наличие некоторого DMA для передачи чего -либо означает, что данные поступают из кадровую буфер:
Давайте говорит, что экран 320x480 с RGB24 = 460K ОЗУ.
Mrburnette
Пт 22 апреля 2016 г., 11:05 вечера
WereCatf написал:
<...>
Я думаю, вы упустили дело: я просто говорил, что вам не всегда нужна практическая причина, чтобы сделать что -то просто для удовольствия, вы знаете..
Я думаю, вы упустили дело: я просто говорил, что вам не всегда нужна практическая причина, чтобы сделать что -то просто для удовольствия, вы знаете..
Martinayotte
Сб 23 апреля 2016 г. 1:10
Допустим, есть случай, что DMA может быть полезным и что в каком -то другом случае это совершенно бесполезно !
В случае ЖК -дисплея он совершенно бесполезен, если только не привязана к какой -то большей системе, такой малиновой PI и аналогично, где вы можете легко посвятить каркас 512 КБ или 1 МБ, в противном случае это было бы бесполезно ...
Конечно, в приложении, как неопиксель, DMA вполне подходит: маленький буфер, который необходимо отправлять снова и снова.
Это тот же сценарий, который я сделал 25 лет назад: отправка потока DMX512 над RS485 на 250 КБ снова и снова с использованием MC68302 с DMA на сериале.
Не пытайтесь использовать DMA, чтобы просто сделать светодиод, мигающий ...
В случае ЖК -дисплея он совершенно бесполезен, если только не привязана к какой -то большей системе, такой малиновой PI и аналогично, где вы можете легко посвятить каркас 512 КБ или 1 МБ, в противном случае это было бы бесполезно ...
Конечно, в приложении, как неопиксель, DMA вполне подходит: маленький буфер, который необходимо отправлять снова и снова.
Это тот же сценарий, который я сделал 25 лет назад: отправка потока DMX512 над RS485 на 250 КБ снова и снова с использованием MC68302 с DMA на сериале.
Не пытайтесь использовать DMA, чтобы просто сделать светодиод, мигающий ...
Rogerclark
Сб 23 апреля 2016 г. 1:21
Я кратко посмотрел на Teensy Lib для ILI9341 и я думаю, что он использует 2 буфера линии
Таким образом, он заполняет один буфер линии, в то время как другой
Тем не менее, это дает преимущество только тогда, когда вы выполняете то, что вы можете эффективно выполнять линию по линии.
Я не слишком уверен, при каких обстоятельствах линейная рендеринг на самом деле дает лучшую производительность. Возможно, текст растрового изображения, где шрифт может быть линией доступа по линии.
И, конечно же.
Но я не думал, что стоило того, чтобы переносить код подростков в течение количества времени и усилий, которые он собирался принять.
Мне все еще нравится идея использования обратного вызова DMA и думаю, что это должно быть вариантом в функциях SPI DMA, но, возможно, вряд ли кто -то его использует.
Таким образом, он заполняет один буфер линии, в то время как другой
Тем не менее, это дает преимущество только тогда, когда вы выполняете то, что вы можете эффективно выполнять линию по линии.
Я не слишком уверен, при каких обстоятельствах линейная рендеринг на самом деле дает лучшую производительность. Возможно, текст растрового изображения, где шрифт может быть линией доступа по линии.
И, конечно же.
Но я не думал, что стоило того, чтобы переносить код подростков в течение количества времени и усилий, которые он собирался принять.
Мне все еще нравится идея использования обратного вызова DMA и думаю, что это должно быть вариантом в функциях SPI DMA, но, возможно, вряд ли кто -то его использует.
Martinayotte
Сб 23 апреля 2016 г. 1:38 утра
Конечно, SPI DMA может быть полезен, как я упоминал, как Neopixel, DMX512 или любой потоковой тип вещей.
Для ЖК -дисплея, я все еще убеждаю, что это довольно бесполезно, даже уменьшая область рамки кадра, потому что, если вам придется делать DrawCircle () с почти заполнением экрана, ЦП придется ждать, вероятно, 10+ раз, что DMA закончил раньше инициализируйте следующую передачу DMA, пока весь DrawCircle () ...
Для ЖК -дисплея, я все еще убеждаю, что это довольно бесполезно, даже уменьшая область рамки кадра, потому что, если вам придется делать DrawCircle () с почти заполнением экрана, ЦП придется ждать, вероятно, 10+ раз, что DMA закончил раньше инициализируйте следующую передачу DMA, пока весь DrawCircle () ...
Racemaniac
Сб 23 апреля 2016 г. 8:46 утра
Вы можете DMA из некоторого внешнего источника памяти до регистров порта, чтобы нарисовать экран, но это становится сложным XD
Стевех
Сб 23 апреля 2016 г., 11:33
Martinayotte написал:
...ЦП придется подождать, вероятно, 10+ раз, что DMA закончил, прежде чем инициализировать следующую передачу DMA, пока весь DrawCircle () ...