Jump to content

    

Странное поведение дисплея

42 minutes ago, zombi said:

А можно как-то остановить процессор? что бы к памяти никто кроме контроллера LCD не обращался.

Записал всё что надо (бело синие полоски) и остановился. Будет дёргаться изображение?

Не знаю. По идее, если где-то поставить точку останова, процессор останавливается. Пробовал, к положительному результату со стороны дисплея это не приводит.

Share this post


Link to post
Share on other sites

Запустил тест на 100 циклов.

Ни одной ошибки SDRAM. 10 раз сработало прерывание ошибки LTDC. Всего 10 раз. 

Да черт возьми, что ж там с чтением адреса? Может быть контроллер дефективным? Неохота его перепаивать.

Share this post


Link to post
Share on other sites

ЕСТЬ НЕБОЛЬШОЙ РЕЗУЛЬТАТ!!!!

Выяснено, что если располагать буфер в SRAM по адресу 0x2000FF00, то дрожание полностью прекращается. На единицу меньше - появляются глюки. 

Я любитель и в некоторых аспектах матчасти разбираюсь плохо. Еще один минус моего любительства -  слепая вера чужому коду, который, если его выложили, очевидно рабочий.

Вот где в этом чужом коде была собака зарыта

volatile uint32_t RGB565[5000] = {0x00000000};
    uint32_t i;
	
   HAL_LTDC_SetAddress(&hltdc,(uint32_t) &RGB565,0);
    for(i=2000;i<4500;i++)
    {
   *(__IO uint16_t*) (hltdc.LayerCfg[0].FBStartAdress + (i*2)) = 0x00ff;
    } 

   while (1);	

Только сейчас я понимаю его несуразность - объявить переменную, которой компилятор присвоит некий адрес и разместить начало буфера по этому же адресу. Хотя и в младших адресах и в старших могут быть еще переменные. 

Просветите невежду, может быть так, что в процессе создания и уничтожения локальных переменных образующиеся пустые места не остаются без внимания системы и происходит "уплотнение" памяти? ПОнятно теперь, почему начало буфера плавало.

 

Но..... проблемы то со SDRAM это не решает. Ладно, пытаясь разместить код в SRAM, я рисковал разворошить осиное гнездо. Но по адресу 0xD0000000 должно быть спокойно. Продолжаю копать...

Share this post


Link to post
Share on other sites
7 minutes ago, MementoMori said:

Просветите невежду, может быть так, что в процессе создания и уничтожения локальных переменных образующиеся пустые места не остаются без внимания системы и происходит "уплотнение" памяти? ПОнятно теперь, почему начало буфера плавало.

Локальные переменные, когда не помещаются в регистрах или требуется их адресация, выделяются на стеке. Поэтому при каждом вызове приведенного фрагмента адрес буфера может быть новым.

Share this post


Link to post
Share on other sites
1 minute ago, aaarrr said:

выделяются на стеке

Опять таки, простите мне мою необразованность - но разве верхушка стека не в старших адресах располагается?

Вот как выглядит красный прямоугольник  на экране, если расположить буфер по адресу 0x2000FF00

 

libcL5kp.png

 

 

А вот, как его корежит, если в качестве адреса буфера указать 0xD0000000, то есть SDRAM (это картинка, в динамике изображение дрожит и шумит)

 

IKqEfg7X.png

Share this post


Link to post
Share on other sites
24 minutes ago, MementoMori said:

разве верхушка стека не в старших адресах располагается?

Стек располагается там, где его явным образом расположили.

Share this post


Link to post
Share on other sites

Вникаю в предмет... Скажите, а MPU может помочь?

Я сделал как в одной статье

 

Image13-4.png

Правда там почему-то адрес SRAM (хотя статья про настройку SDRAM), но я попробовал поменять адрес на 0x20010000 - не помогло. Что-то не так или это тупиковый путь?

Share this post


Link to post
Share on other sites
5 hours ago, MementoMori said:

Скажите, а MPU может помочь?

А вы прочитайте для чего используется Memory Protection Unit. Он всего-лишь вызовет вам исключение при попытке доступа в запрещённую область памяти. А диапазоны памяти и их аттрибуты вы сами настраиваете.

Share this post


Link to post
Share on other sites

При указании в качестве адреса буфера FLASH памяти тоже дрожание. Какой бы я адрес ни указал.

Share this post


Link to post
Share on other sites

Господа это абсурд!!!!!

 

Картинка перестала дрожать лишь тогда, когда я уменьшил пиксельклок до 30 МГц, а размер окна до 200х200 пикселей, формат цвета RGB565. Правда даже в этом случае есть какой-от глюк, цвет 0xF800 дает розовый квадрат, хотя по идее это чистый красный.

 

Так.... скажите мне, какова пропускная способность памяти SDRAM 32 бит на частоте 108 МГц?

Можно ли как-то практически средствами контроллера измерить ее?

 

Ну не может такого быть чтобы SDRAM+LTDC не мог потянуть кадр больше 80 кб...

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now