Перейти к содержанию
    

Внешняя SDRAM одновременно как видеопамять и память программ

Доброго времени суток всем!

Микроконтроллер LPC2478, внешняя SDRAM MT48LC и TFT-дисплей Powertip PH480272T-006-I13Q с контроллером OTA5180A. В качестве видеопамяти используются первые 512 кБ внешней SDRAM (она используется через модуль EMC).

При создании бутлоадера столкнулся с такой проблемой. Пока программа выполняется из внутреннего флеша микроконтроллера - все в порядке. Но стоит загрузить и начать выполнять ее из внешней SDRAM (области после видеопамяти), как изображение на дисплее начинает дергаться.

В ходе отладки урезал программу до вывода нескольких черных точек на белом экране. Если точки в нулевой (самой верхней) или например в 16-й строчке дисплея - не дергаются. В сотой - дергаются. Это если их периодически отрисовывать, даже не стирая. Если отрисовать один раз и больше экран не трогать - не дергаются.

С чем может быть связано такое поведение? Это вообще корректно - использовать внешнюю SDRAM сразу и под видеопамять и под память программ?

 

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

С чем может быть связано такое поведение? Это вообще корректно - использовать внешнюю SDRAM сразу и под видеопамять и под память программ?

 

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

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

 

Использовать на LPC24 SDRAM под память программ вообще плохая идея из-за отсутствия кэш-памяти. Поэтому и медленно, настройками EMC не лечится.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проверьте настройки приоритетов 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

?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Очень хорошо обращаться к SDRAM большими порциями. Рандомное по-байтовое чтение-запись резко убивает производительность, по сравнению со встроенной RAM.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А как понижение приоритета скажем CPU скажется на работе программы?

И, собственно, почему были эти дергания? Контроллер LCD так требователен к непрерывности чтения данных?

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

 

Так вроде же есть что-то вроде кеша в EMC - ?

Что-то вроде, это Вы правильно заметили :) Хотя и такой буфер работает в какой-то степени: без него производительность упала бы не в 1.4-1.6 раза, а гораздо сильнее.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

А с USB могут возникнуть проблемы? Интересуют режимы и Host и OTG.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А с USB могут возникнуть проблемы? Интересуют режимы и Host и OTG.

Сломаться совсем (то есть до получения состояния ошибки) может только хост в изохронном режиме. Все остальные передачи полностью буферизируются во внутренних FIFO.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сломаться совсем (то есть до получения состояния ошибки) может только хост в изохронном режиме. Все остальные передачи полностью буферизируются во внутренних FIFO.

Благодарю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всем здравствуйте.

Немного повторюсь по теме.

Теже симптомы, но на STM32F429.(Обращение к внешней SDRAM, используемой для памяти дисплея и внешней памяти вызывает дерганье экрана)

Существует ли доступ к управлению приоритетам AHB для STM?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...