Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Внешняя SDRAM одновременно как видеопамять и память программ
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
murug
Доброго времени суток всем!
Микроконтроллер 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
Цитата(murug @ May 7 2015, 15:04) *
С чем может быть связано такое поведение? Это вообще корректно - использовать внешнюю SDRAM сразу и под видеопамять и под память программ?

P.S. А еще обнаружил, что код выполняется из MT48LC в 1.4 раза медленнее, чем из внутреннего флеша с включенным MAM, и в 1.6 раз медленнее, чем из внутренней ОЗУ. Это нормально? Или надо оптимизировать какие-то настройки EMC?

Проверьте настройки приоритетов AHB, там по умолчанию для LCD стоит низкий приоритет, если не ошибаюсь.

Использовать на LPC24 SDRAM под память программ вообще плохая идея из-за отсутствия кэш-памяти. Поэтому и медленно, настройками EMC не лечится.
murug
Цитата(aaarrr @ May 7 2015, 15:09) *
Проверьте настройки приоритетов 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 так требователен к непрерывности чтения данных?

Цитата(aaarrr @ May 7 2015, 15:09) *
Использовать на 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
Очень хорошо обращаться к SDRAM большими порциями. Рандомное по-байтовое чтение-запись резко убивает производительность, по сравнению со встроенной RAM.
aaarrr
Цитата(murug @ May 7 2015, 15:42) *
А как понижение приоритета скажем CPU скажется на работе программы?
И, собственно, почему были эти дергания? Контроллер LCD так требователен к непрерывности чтения данных?

Если в какой-то единичный момент времени процессор не получит данные, то это вряд ли заметно скажется на общей производительности. А вот когда контроллер LCD не может вовремя заполнить FIFO, появляются "дерганья".

Цитата(murug @ May 7 2015, 15:42) *
Так вроде же есть что-то вроде кеша в EMC - ?

Что-то вроде, это Вы правильно заметили sm.gif Хотя и такой буфер работает в какой-то степени: без него производительность упала бы не в 1.4-1.6 раза, а гораздо сильнее.
murug
Цитата(aaarrr @ May 7 2015, 15:59) *
Если в какой-то единичный момент времени процессор не получит данные, то это вряд ли заметно скажется на общей производительности. А вот когда контроллер LCD не может вовремя заполнить FIFO, появляются "дерганья".

А с USB могут возникнуть проблемы? Интересуют режимы и Host и OTG.
aaarrr
Цитата(murug @ May 8 2015, 10:26) *
А с USB могут возникнуть проблемы? Интересуют режимы и Host и OTG.

Сломаться совсем (то есть до получения состояния ошибки) может только хост в изохронном режиме. Все остальные передачи полностью буферизируются во внутренних FIFO.
murug
Цитата(aaarrr @ May 8 2015, 11:17) *
Сломаться совсем (то есть до получения состояния ошибки) может только хост в изохронном режиме. Все остальные передачи полностью буферизируются во внутренних FIFO.

Благодарю.
owl
Всем здравствуйте.
Немного повторюсь по теме.
Теже симптомы, но на STM32F429.(Обращение к внешней SDRAM, используемой для памяти дисплея и внешней памяти вызывает дерганье экрана)
Существует ли доступ к управлению приоритетам AHB для STM?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.