Zayac 0 25 мая, 2017 Опубликовано 25 мая, 2017 · Жалоба Добрый день! Прошу подсказать бывалых, в какую сторону копать в следующей ситуации: Есть девайс с процессором OMAP L137, ARM-ядро не используется, только DSP. К процу через EMIFA подключена ПЛИС. ПЛИС периодически генерит данные, выставляет уровень на GPIO процессора, возникает прерывание, и процессор вычитывает данные из ПЛИС посредством EDMA3. Интервал генерации прерываний 5 мс. В прерывании от GPIO происходит старт EDMA-передачи (EDMA3_DRV_TRIG_MODE_MANUAL), далее данные из ПЛИС копируются в заданную область памяти. Все прекрасно работает, но только до тех пор, пока не пытаемся работать с NAND-flash (которая также подключена к процессору) в DMA-режиме. В отладке видно, что в дебрях драйвера NAND происходит ожидание окончания EDMA-передачи, которое никогда не наступает, и процессор зависает. В режиме работы NAND-драйвера без DMA зависания не происходит, но появляются потери данных при вычитке из ПЛИС, видимо, процессор "замирает" на время записи-чтения страницы. Драйвер NAND используется стандартный от TI, biospsp_03_00_01_00 с незначительными модификациями под тип микросхемы памяти. Если запуск вычитки данных из ПЛИС запускать не из прерывания, а из потока, то зависания не происходит, однако и в этом случае возникают потери данных из ПЛИС. Судя по всему, принудительный запуск вычитки из ПЛИС в прерывании нарушает алгоритм работы с EDMA в драйвере NAND. Почему это происходит, до конца не понятно - каналы EDMA3 для вычитки из ПЛИС и NAND разные, в документации не нашел явного запрета на запуск передачи из прерывания. Идеальным решением было бы обеспечить бесперебойную вычитку данных из ПЛИС, работу с NAND можно еще более замедлить. Прошу совета, как можно модифицировать алгоритм NAND-драйвера или алгоритм вычитки из ПЛИС. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 236 25 мая, 2017 Опубликовано 25 мая, 2017 · Жалоба Прошу совета, как можно модифицировать алгоритм NAND-драйвера или алгоритм вычитки из ПЛИС. Могу посоветовать: избавиться от "дебрей", прочитать даташит на периферию и написать самостоятельно работу и с EMIFA и с EDMA3. Сложного там ничего нет. Ну или, раз работу с Flash можно замедлить, то зачем поставили параллельную? Может лучше было SPI-FLASH? И не было бы пересечения по EMIFA. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться