murug 0 7 мая, 2015 Опубликовано 7 мая, 2015 · Жалоба Доброго времени суток всем! Микроконтроллер LPC2478, внешняя SDRAM MT48LC и TFT-дисплей Powertip PH480272T-006-I13Q с контроллером OTA5180A. В качестве видеопамяти используются первые 512 кБ внешней SDRAM (она используется через модуль EMC). При создании бутлоадера столкнулся с такой проблемой. Пока программа выполняется из внутреннего флеша микроконтроллера - все в порядке. Но стоит загрузить и начать выполнять ее из внешней SDRAM (области после видеопамяти), как изображение на дисплее начинает дергаться. В ходе отладки урезал программу до вывода нескольких черных точек на белом экране. Если точки в нулевой (самой верхней) или например в 16-й строчке дисплея - не дергаются. В сотой - дергаются. Это если их периодически отрисовывать, даже не стирая. Если отрисовать один раз и больше экран не трогать - не дергаются. С чем может быть связано такое поведение? Это вообще корректно - использовать внешнюю SDRAM сразу и под видеопамять и под память программ? P.S. А еще обнаружил, что код выполняется из MT48LC в 1.4 раза медленнее, чем из внутреннего флеша с включенным MAM, и в 1.6 раз медленнее, чем из внутренней ОЗУ. Это нормально? Или надо оптимизировать какие-то настройки EMC? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 68 7 мая, 2015 Опубликовано 7 мая, 2015 · Жалоба С чем может быть связано такое поведение? Это вообще корректно - использовать внешнюю SDRAM сразу и под видеопамять и под память программ? P.S. А еще обнаружил, что код выполняется из MT48LC в 1.4 раза медленнее, чем из внутреннего флеша с включенным MAM, и в 1.6 раз медленнее, чем из внутренней ОЗУ. Это нормально? Или надо оптимизировать какие-то настройки EMC? Проверьте настройки приоритетов AHB, там по умолчанию для LCD стоит низкий приоритет, если не ошибаюсь. Использовать на LPC24 SDRAM под память программ вообще плохая идея из-за отсутствия кэш-памяти. Поэтому и медленно, настройками EMC не лечится. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
murug 0 7 мая, 2015 Опубликовано 7 мая, 2015 · Жалоба Проверьте настройки приоритетов AHB, там по умолчанию для LCD стоит низкий приоритет, если не ошибаюсь. Офигеть, помогло! Несколько дней долбежки головой об стену были просто из-за незнания матчасти ( Спасибо огромное! Сделал AHBCFG1_bit.SHDL = 0; // priority arbitration // AHBCFG1_bit.BB = 0; // Never break defined length bursts. // AHBCFG1_bit.QT = 0; // A quantum is an AHB clock. // AHBCFG1_bit.QT = 4; // Preemptive, re-arbitrate after 16 AHB quanta. // AHBCFG1_bit.DM = 1; // Master 1 (CPU) is the default master. AHBCFG1_bit.EP1 = 4; // External priority for master 1 (CPU). AHBCFG1_bit.EP2 = 1; // External priority for master 2 (GPDMA). AHBCFG1_bit.EP3 = 2; // External priority for master 3 (AHB1). AHBCFG1_bit.EP4 = 3; // External priority for master 4 (USB). AHBCFG1_bit.EP5 = 5; // External priority for master 5 (LCD). А как понижение приоритета скажем CPU скажется на работе программы? И, собственно, почему были эти дергания? Контроллер LCD так требователен к непрерывности чтения данных? Использовать на LPC24 SDRAM под память программ вообще плохая идея из-за отсутствия кэш-памяти. Поэтому и медленно, настройками EMC не лечится. Так вроде же есть что-то вроде кеша в EMC - The AHB interface reads and writes via buffersto improve memory bandwidth and reduce transaction latency. The EMC contains four 16-word buffers ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 7 мая, 2015 Опубликовано 7 мая, 2015 · Жалоба Очень хорошо обращаться к SDRAM большими порциями. Рандомное по-байтовое чтение-запись резко убивает производительность, по сравнению со встроенной RAM. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 68 7 мая, 2015 Опубликовано 7 мая, 2015 · Жалоба А как понижение приоритета скажем CPU скажется на работе программы? И, собственно, почему были эти дергания? Контроллер LCD так требователен к непрерывности чтения данных? Если в какой-то единичный момент времени процессор не получит данные, то это вряд ли заметно скажется на общей производительности. А вот когда контроллер LCD не может вовремя заполнить FIFO, появляются "дерганья". Так вроде же есть что-то вроде кеша в EMC - ? Что-то вроде, это Вы правильно заметили :) Хотя и такой буфер работает в какой-то степени: без него производительность упала бы не в 1.4-1.6 раза, а гораздо сильнее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
murug 0 8 мая, 2015 Опубликовано 8 мая, 2015 · Жалоба Если в какой-то единичный момент времени процессор не получит данные, то это вряд ли заметно скажется на общей производительности. А вот когда контроллер LCD не может вовремя заполнить FIFO, появляются "дерганья". А с USB могут возникнуть проблемы? Интересуют режимы и Host и OTG. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 68 8 мая, 2015 Опубликовано 8 мая, 2015 · Жалоба А с USB могут возникнуть проблемы? Интересуют режимы и Host и OTG. Сломаться совсем (то есть до получения состояния ошибки) может только хост в изохронном режиме. Все остальные передачи полностью буферизируются во внутренних FIFO. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
murug 0 8 мая, 2015 Опубликовано 8 мая, 2015 · Жалоба Сломаться совсем (то есть до получения состояния ошибки) может только хост в изохронном режиме. Все остальные передачи полностью буферизируются во внутренних FIFO. Благодарю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
owl 0 12 февраля, 2016 Опубликовано 12 февраля, 2016 · Жалоба Всем здравствуйте. Немного повторюсь по теме. Теже симптомы, но на STM32F429.(Обращение к внешней SDRAM, используемой для памяти дисплея и внешней памяти вызывает дерганье экрана) Существует ли доступ к управлению приоритетам AHB для STM? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться