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

распределение задач и нагрузка на шину

чтоб это понять - нужно иметь другой склад ума, где имеются базовые понятия о растактовках процессора и что можно сделать с периферийниками приставок за определенное число такто эмулируемых процессоров :)

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

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


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

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

 

я не про себя говорю, а про подход и понимание принципов работы эмуляторов игровых приставок.

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


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

Я, извиняюсь, не супер-пупер профессор, но всё изложенное Вами прекрасно понял, хоть приставки никогда и не эмулировал :)

Ваш трэшэр мне очень понравился! Но зачем вы людям вот так сразу...... мож какую идею бы и подкинули нормальную...а так обидятся и не станут постить в тему...

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


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

1) на руках дисплей со встроенным контроллером

Давайте конкретизируем - какой дисплей? И ссылку на datasheet, пожалуйста.

2) требуется получить много вариантов экзотических разрешений: от 160x144 до 320x240

Без проблем. От 1х1 до 65535х65635 с шагом в один пиксель по любой оси.

3) не хочу тратить ресурсы на развертку кадра....

Не понял. Какая развертка? dma запустили и занимайтесь другими делами.

4) частота обновления дисплея должна быть 60 Hz

Не вижу проблемы.

делал сразу 4 прорисовки без палитры в буфер - намного медленее.

Нет, вы меня не поняли. Делайте прорисовку в буфер как и сейчас, после этого маленьким быстрым циклом преобразуйте это буфер в rgb, и, с помощью dma, отправляете его на дисплей (а в это время начинаете прорисовку следующего кадра). Т.е., условно, цикл прорисовки выглядит следующим образом:

while (true)
{
  draw_frame();  // draw_sprite0(); draw_plane0(); и т.д.
  convert_frame_to_rgb();
  if (!first_frame) wait_for_output_done();
  start_frame_output_via_dma();
}

 

Я, извиняюсь, не супер-пупер профессор

.......

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

+100

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


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

vik0:

> Нет, вы меня не поняли. Делайте прорисовку в буфер как и сейчас, после этого маленьким быстрым циклом

> преобразуйте это буфер в rgb, и, с помощью dma, отправляете его на дисплей

> (а в это время начинаете прорисовку следующего кадра). Т.е., условно, цикл прорисовки выглядит следующим образом...

 

Сделал так как вы сказали на DT (BF532) - к сожалению скорость эмулятора не изменилась(измерял).

 

Вот код отрисовки одной строки на дисплей (ширина(width) может принимать значения : 256 или 320):

 

extern unsigned short int DMA_BUFFER[320];

 

#define LCD_Line \

{ \

register unsigned long int i; \

for(i=0;i<Width;i++) DMA_BUFFER=PALETTE[bUFFER[i+0x20]]; \

flush_data_buffer((void*)DMA_BUFFER,(void*)(DMA_BUFFER+(Width<<1)),0); \

*pMDMA_S1_CONFIG=WDSIZE_16|DMAEN; \

*pMDMA_D1_CONFIG=WDSIZE_16|WNR|DMAEN; \

}

 

Остальные регистры проинициализированы 1 раз:

 

*pMDMA_S1_PERIPHERAL_MAP=0x0040;

*pMDMA_S1_START_ADDR=(void*)DMA_BUFFER;

*pMDMA_S1_X_COUNT=Width;

*pMDMA_S1_X_MODIFY=2;

*pMDMA_D1_PERIPHERAL_MAP=0x0040;

*pMDMA_D1_START_ADDR=(void*)0x20010000; //Адрес LCD

*pMDMA_D1_X_COUNT=Width;

*pMDMA_D1_X_MODIFY=0;

 

DMA_Buffer - выровнен на 64 байта, находится в SDRAM. Кеши включены, write-back

 

всё это наводит к мысли, что Memory DMA - всего лишь рекламный слоган, как тут сказал один из участников (Stanislav по -моему)

при общей шине быстродействие не увеличивается

 

P.S. а кэши не по-децки рулят :)

 

P.P.S. может регистром траффика DMA порулить? может ли он исправить ситуацию (он у меня по дефолту)?

Изменено пользователем denebopetukius

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


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

дополнительно перевёл SPI на ДМА.

сделал точные замеры.

 

прирост в скорости на 4%

 

Видать нагрузка действительно большая, так как дисплей и память делят шину, несмотря на кэши.

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


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

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

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

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

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

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

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

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

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

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