Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
VRTP > Другие микроконтроллеры. > TMS320C6745 - начало пути


Автор: Gospodin_Riba Feb 19 2019, 01:17 PM
Итак, начнём... smile.gif

Была составлена принципиальная схема и разведена печатная плата для DSP от Texas Instruments - TMS320C6745 - легендарный DSP с мощнейшими возможностями! biggrin.gif

На борту - 32 МБ памяти, шина 16 бит.

Автор: Gospodin_Riba Feb 19 2019, 01:20 PM
По идее это чудо должно взлететь на 456 МГц (ядро) и152 МГц (память). Но я втайне надеюсь, что ещё удастся разогнать сверх этого (для тяжёлых эмуляторов).

Свободные пины выведенына PLS-ки.

Есть возможность параллельно подключить LCD, который не будет мешать внешней памяти, так как висят на разных шинах. Это прорыв - ни один ARM так не умеет. Только тупой RGB. biggrin.gif

Автор: Andrew007 Feb 19 2019, 01:20 PM
Здорово! А где схема? А где плата в спринте или пикаде?

Автор: Gospodin_Riba Feb 19 2019, 01:23 PM
Сие творение поддерживает много вариантов загрузки. Мне удобны: загрузка по UART и с SPI EEPROM.

В финале будет загрузчик с меню и файловой системой. С карты памяти будет считываться приложение и грузиться в SDRAM и прыг-прыг туда!

Как тут делал 10 лет назад: http://zx-spectrum128k.narod.ru/Romanich/emu-apparatchik/TF.htm
Принцип тот же. Только с поддержкой ФС.

Вид сзади - под DSP куча блокировочных конденсаторов. wacko.gif

Автор: Gospodin_Riba Feb 19 2019, 01:27 PM
Несмотря на кажущуюся непопулярность, этот DSP очень популярный и завоевал сердца студентов и преподов в отраслях ЦОС. А также был замечен в некоторых приёмниках ICOM, SDR аппаратуре и много где ещё.

Примеры программирования под этот DSP доступны в интернете и куча туториалов, что радует.

Чисто железный подход, без линукса и кало-кубов. smile.gif

Заказано 9 штук печатных плат. Первоначально устройство задумано в виде отладочной платы, с набортным минимумом для запуска. Все свободные пины на плате промаркированы сеткографией, чтобыне лезть в схему.

Если всё взлетит - велкам в личку! smile.gif

Автор: Gospodin_Riba Feb 19 2019, 01:29 PM
QUOTE (Andrew007 @ Feb 19 2019, 01:20 PM)
Здорово! А где схема? А где плата в спринте или пикаде?


QUOTE
Заказано 9 штук печатных плат. Первоначально устройство задумано в виде отладочной платы, с набортным минимумомдля запуска. Все свободные пины на плате промаркированы сеткографией, чтобыне лезть в схему.


Схема будет. Платы заказать можно будет у меня, когда прийдут.
Но для начала мне самому опробовать надо.

Автор: Gospodin_Riba Feb 19 2019, 01:37 PM
Схема (draft): http://www.picshare.ru/uploads/190218/G2KVQKmE92.png

Автор: Andrew007 Feb 19 2019, 02:04 PM
Здорово! Буду ждать!

Автор: vladlen Feb 19 2019, 03:18 PM
Это DSP завоевал еще и сердца EAS систем smile.gif

Почему, кстати, именно такой выбрали?
Чем он лучше других тмс для этой игрушки?

Автор: Gospodin_Riba Feb 20 2019, 01:35 PM
QUOTE (vladlen @ Feb 19 2019, 03:18 PM)
Почему, кстати, именно такой выбрали?
Чем он лучше других тмс для этой игрушки?

Я не знаток всей линейки TMS-ов. Но подсказали в другом форуме.

Я уже писал почему его выбрал:
http://vrtp.ru/index.php?showtopic=30174&view=findpost&p=805234 smile.gif

Автор: romanetz Feb 20 2019, 05:46 PM
А среда - ccs и отладчик Xds100 китайский?
Я ими интересовался в 2008м, но тогда xds560 оригинальный (китайских не было) для вчерашнего студента был далеко за бюджетом

Автор: Gospodin_Riba Feb 24 2019, 12:57 PM
QUOTE (romanetz @ Feb 20 2019, 05:46 PM)
А среда - ccs и отладчик Xds100 китайский?
Я ими интересовался в 2008м, но тогда xds560 оригинальный (китайских не было) для вчерашнего студента был далеко за бюджетом

Для портирования игр отладчик нафиг не нужен, ибо дорогой и есть UART со светодиодами. Не припомню одного случая , где отладчик нужен был бы мне как воздух.

По CSS, ещё детально не копал. Полагаю, не хуже дела чем с Кейлом армовским. Было бы желание. GCC вроде б как тоже должен быть.

Автор: Gospodin_Riba Mar 1 2019, 06:02 AM
Пришли платы. 12 штук. Кому надо, пишите в личку, отдам недорого.

Автор: Gospodin_Riba Mar 1 2019, 06:03 AM
Контакты +5V, +3.3V, GND, перемычки для загрузки и GPIO промаркированы.

Автор: Gospodin_Riba Mar 1 2019, 06:03 AM
В ближайшее время распаяю минимум для запуска C6745.

Автор: Gospodin_Riba Mar 1 2019, 06:03 AM
Стек печатной платы спроектирован с учётом волнового сопротивления для трасс SDRAM - в районе 40..60 Ом:

QUOTE
фольга - 18 мкм
препрег ("1080" х 2) - 0.1372 мм

фольга - 35 мкм
ядро - 1 мм
фольга - 35 мкм

препрег ("1080" х 2) - 0.1372 мм
фольга - 18 мкм


Визуальная проверка даёт приблизительно такой же результат - "слоёнка" из 7 частей, толщина 1 мм. Зазор между внешним и внутренним 1/7 = 0.1428 мм.

К тому же, чем тоньше, тем более помехозащищённее (crosstalk падает квадратично с уменьшением расстояния).

По дефолту делают вообще 0.2 - 0.3 мм, но для моего случая это не годится.

Автор: Gospodin_Riba Mar 2 2019, 12:33 PM
Начал собирать.

Закралась ошибка - номиналы резисторов неверно выбраны для LDO на 1.3V. Вместо 5,6 кОм надо 240 Ом, а вместо 220 Ом надо 10 Ом. Иначе будет не 1.3V а 3.5 - 4.5 V и сожжет DSP. Хорошо, что я по-блочно паяю и проверяю.

Пока спаял только всё минимально необходимое.

Предусмотрел на плате кучу перемычек(джамперов) - можно исключать из схемы штатные LDO если они не нравятся, и запитать внешними другими. А также для замера потребляемых токов полезно.

Всего 3 напряжения:
5V (исходное)
3.3V
1.3V

Автор: Gospodin_Riba Mar 2 2019, 12:40 PM
Да, пришлось немного напрячься, чтобы залить припой на Termal Pad, который он же GND микросхемы, который единственный. Лудил пузо микросхемы и пад на плате. Потом когда припаял ноги микросхемы, в отверстия вливал припой - ПОС-61 проволочка 0.5мм + китайский паяльник 45 Вт. И феном на 300 градусов дул. Плата и корпус микросхемы разогревается как утюг, думал что повредил, но вроде дышит! Весь тепловой удар взяли внутренние слои и Termal Pad который металлическая пластина (на пузе). Оно по идее так и должно, иначе как припаять Termal Pad, закрытый корпусом микросхемы с одной стороны и платой с другой?!

Автор: Gospodin_Riba Mar 2 2019, 12:45 PM
А теперь самое интересное.

Выставил режим загрузки по UART-0.

Чтобы его использовать, кварц тактового генератора C6745 должен быть 24 МГц.

Положение перемычек на плате:
B7 - замкнута лог. "1"
B2 - разомкнута лог "0"
B1 - замкнута лог. "1"
B0 - замкнута лог. "1"

И Boot3=0 (на плате всегда =0 - резистор 1 кОм на землю).

Коммуникация с компом через конвертер MAX3232.

UART0_TXD - контакт 5.9 на плате - к выводу 11 MAX3232
UART0_RXD - контакт 5.8 на плате - к выводу 12 MAX3232

Автор: Gospodin_Riba Mar 2 2019, 12:48 PM
Выстраданный конвертер RS-232 => UART. Была поддельная MAX3232 которая на скорости 115200 бод не работала от 3.3V (только от 5V).

Заменил брак, теперь работает как надо.
На фотке ниже - нормальная MAX3232 (не брак!)

Автор: Gospodin_Riba Mar 2 2019, 12:49 PM
Ну и самое интересное: ядро дышит, DSP запущен.
Отвечает BOOTME в терминалке, всё согласно документации от TI biggrin.gif support.gif 1000000Z.gif 4.gif

Дальше надо разбираться в каком формате грузить и как. Ну и blinking LED накидать в CSS. smile.gif

Автор: vladlen Mar 2 2019, 01:11 PM
Работает нормально после жестокой пайки без нижнего подогрева, круто! smile.gif

image

Автор: microxa Mar 2 2019, 03:00 PM
Да, круть немеряная.. хотя начало пути..

"Игровая консоль? Игровая приставка?"

В прошлом веке, времен NT4.0 32метра оперативы было у компов, уровня серверного кластера... Или в синтезаторах.. (Хотя этажерку из удачных (по адресной шине) SDRAM напаивал на AWE64 - памяти на ней стало аж 8 метров.. но вышел очередной "мартышкин труд" , особо толку не было, а вот плата неприглядно выглядела из за паутины проводков.. пришлось потом откатыватся опять на 2метровый корпус ОЗУ ( вроде как из донорских 72пиновых SIMM)

А так пожелаю не забывать, чтонибуть более.. радолюбительское.. или аудиофильское.. как вот был kx project там под SB-Live-вский DSP что-то "наколдовать" можно было.. (правда так и не понял, этот марсианский dsp-IT)

з.ы
А дату изготовления чипа, её реально опознать?


Автор: Gospodin_Riba Mar 2 2019, 03:49 PM
QUOTE
(Хотя этажерку из удачных (по адресной шине) SDRAM напаивал на AWE64 - памяти на ней стало аж 8 метров.. но вышел очередной "мартышкин труд" , особо толку не было, а вот плата неприглядно выглядела из за паутины проводков.. пришлось потом откатыватся опять на 2метровый корпус ОЗУ ( вроде как из донорских  72пиновых SIMM)

Музакер? smile.gif
ОЗУ на AWE также как и на Гусях и Turtle beach нужны для загрузки каcтомных MIDI-патчей. Вариант когда таблично-волновой синтезатор аппаратный и совместим с General MIDI.
OPL4 вроде как. Или аналог.
Сейчас в ПК ставят убогий AC97, который не более, чем тупо ЦАП-АЦП.

QUOTE
А так пожелаю не забывать, чтонибуть более.. радолюбительское.. или аудиофильское.. как вот был  kx project там под SB-Live-вский DSP что-то "наколдовать" можно было.. (правда так и не понял, этот марсианский dsp-IT)

Дядьки за рубежом клепают на этом DSP разные штуки. У нас меньше, но вроде как на cqham что-то мелькало.

А вообще конечно удивляет низкая активность радиолюбителей РФ, может из-за лже-кризиса ?
Ну или смещение пластов ценностей с креативной на потребляцкую?
Вспомнил такое : "В СССР достижение: человек в космос полетел. А сейчас? У жены айфон на треть миллиметра тоньше, а у меня тачка..." Жопа одним словом.

Автор: Gospodin_Riba Mar 3 2019, 10:15 AM
Наконец-то лёд тронулся и удалось написать рабочую моргалку светодиодом.

Можно использовать Code Composer Studio Version: 5, он лечится - выкинув файл mdex.dll.

Рабочий код ниже:
CODE
#define u32 unsigned int

#define SYSCFG_0_REGS 0x01C14000
#define GPIO_0_REGS   0x01E26000
#define PSC1_BASE     0x01E27000

#define PSC1_MDCTL    (PSC1_BASE+0xA00)
#define PSC1_MDSTAT   (PSC1_BASE+0x800)

#define KICK0R          (*(volatile u32*)(SYSCFG_0_REGS+0x038))
#define KICK1R          (*(volatile u32*)(SYSCFG_0_REGS+0x03c))

#define PINMUX13        (*(volatile u32*)(SYSCFG_0_REGS+0x154))

#define GPIO_DIR01      (*(volatile u32*)(GPIO_0_REGS+0x10))
#define GPIO_OUT_DATA01 (*(volatile u32*)(GPIO_0_REGS+0x14))
#define GPIO_SET_DATA01 (*(volatile u32*)(GPIO_0_REGS+0x18))
#define GPIO_CLR_DATA01 (*(volatile u32*)(GPIO_0_REGS+0x1C))

#define PSC1_PTCMD   (*(volatile u32*)(PSC1_BASE+0x120))
#define PSC1_PTSTAT  (*(volatile u32*)(PSC1_BASE+0x128))

void Unlock_Hardware(void)
{
KICK0R=0x83E70B13;
KICK1R=0x95A4F1E0;
}

void PSC1_lPSC_enable(u32 PD,u32 LPSC_num)
{
*(volatile u32*)(PSC1_MDCTL+4*LPSC_num)=(*(volatile u32*)(PSC1_MDCTL+4*LPSC_num)&0xFFFFFFE0)|0x0003;
PSC1_PTCMD=0x1<<PD;
while((PSC1_PTSTAT&(0x1<<PD))!=0);                             //Wait for power state transition to finish
while(((*(volatile u32*)(PSC1_MDSTAT+4*LPSC_num))&0x1F)!=0x3);
}

void Delay(volatile u32 ms) //for 24 MHz & disabled cache
{
volatile u32 i;
while(ms>0)
{
 for(i=0;i<1725;i++);
 ms--;
}
}

void main(void)
{
Unlock_Hardware();          //unlock registers

PINMUX13|=0x08000000;       //select function GP0[0]

PSC1_lPSC_enable(0,3);      //enable GPIO

GPIO_DIR01&=0xFFFFFFFE;     //GP0[0] output

while(1)
{
 GPIO_SET_DATA01=0x00000001; //set GP0[0]
 Delay(1000);

 GPIO_CLR_DATA01=0x00000001; //clear GP0[0]
 Delay(1000);
}

}

Автор: Gospodin_Riba Mar 3 2019, 10:18 AM
Немного огорчило, что CCSv5 не понимает синтаксиса -C99. Хотя есть enable GNU extentions и C++ options. Тем не менее, объявление переменных в нутри цыклов и объявление массивов переменной длинны НЕ ПОДДЕРЖИВАЕТСЯ!

Надо посмотреть, как дела обстоят в последних версиях CSS.

Прошивка в AIS формате для загрузки по UART:

Автор: Gospodin_Riba Mar 3 2019, 10:19 AM
Пошагово алгоритм для загрузки программы по UART для TMS320C645:

1) Билдим проект:

Автор: Gospodin_Riba Mar 3 2019, 10:20 AM
2) Делаем AIS Boot Image с помощью AISgen ДЛЯ D800K005 !

Автор: Gospodin_Riba Mar 3 2019, 10:22 AM
3) Полученный Blink.bin из Blink.out отправляем по UART с помощью программы UART Boot Host для OMAP-L137.

Таблицу соединений ПК и отладочной платы Mini6745 я давал выше.

Не забыть нажать RESET или передергнуть питание, когда нажали кнопку Start!

Автор: Gospodin_Riba Mar 3 2019, 10:25 AM
Так как политика TI оставляет желать лучшего и они склонны удалять со своих сайтов ссылки на скачивание необходимых инструментов, то выкладываю дистрибутив AISgen и UART Boot Host для C6745 и совместимых с ним по загрузке камней (C6747, C6743, OMAP-L137):

Автор: Gospodin_Riba Mar 3 2019, 10:26 AM
Ну и пруф конечно же: support.gif 4.gif 1000000Z.gif








Следующий шаг - запуск SDRAM и её тестирование. smile.gif

Автор: Gospodin_Riba Mar 4 2019, 05:59 AM
Разобрался с PLL (файлы проекта PLL.c/PLL.h), выставил такой режим:

частота ядра: 456 МГц
частота шины EMIFB: 152 МГц (SDRAM)
частота шины EMIFA: 91.2 МГц (пока свободна)

Проинитил SDRAM (файлы проекта EMIFB.c/EMIFB.h) MT48LC16M16 на частоту 152 МГц (6.5 нс).
Это максимальная частота шины по даташиту на C6745. Сама память ещё более быстрая 166 МГц (6 нс).

---

Накатал тест памяти (файлы проекта MemTest.c/MemTest.h).

Несколько тестов: запись словами по 8,16,32,64 байт.

16 типов шаблонов:

CODE
const u64 Patterns[]=
{
0x0000000000000000ULL,
0xFFFFFFFFFFFFFFFFULL,
0x5555555555555555ULL,
0xAAAAAAAAAAAAAAAAULL,
0x1111111111111111ULL,
0x2222222222222222ULL,
0x4444444444444444ULL,
0x8888888888888888ULL,
0x3333333333333333ULL,
0x6666666666666666ULL,
0x9999999999999999ULL,
0xCCCCCCCCCCCCCCCCULL,
0x7777777777777777ULL,
0xBBBBBBBBBBBBBBBBULL,
0xDDDDDDDDDDDDDDDDULL,
0xEEEEEEEEEEEEEEEEULL,
};


Вначале идёт заполнение всеми шаблонами по-очереди, затем заполнение отдельным шаблоном.

А также дополнительный тест - запись псевдо-случайными числами.
Код функции Random() такой:
CODE
u32 Seed;

u32 Random32(void)
{
register u32 c=0x21;
register u32 a=Seed;
register u32 b;
m0:
b=a;
a+=a;
if(a>b) goto m1;
a^=0xC5;
m1:
c--;
if(c) goto m0;
Seed=a;
return Seed;
}


Seed перед использованием Random32() надо проинитить простым числом (используется 0x7FFFFFFF).

Тест всей памяти идёт около 4 минуты 20 секунд (последние тесты с Random вносят задержку).

Если что-то не так, то тестирование памяти прекратится и светодиод на порте GP0[0] будет быстро моргать (интервал 100 мс).
Если всё ОК и тест пройден, то светодиод будет медленно мигать (интервал 1 с).

Кеширование кода и данных естественно - не задействовано(выключено), чтобы работа с SDRAM была не в пакетном режиме.
Адресное пространство SDRAM (32 МБ) объявлено как volatile, что исключает оптимизацию компилятора - для гарантированного обращения к каждой ячейке памяти.

---

При написании программ усердно курю Reference Manual на C6745 и поглядываю на следующие сорцы:

c6000-evi-lib-master.zip и C6745-master.zip (оба качаются с GitHub).

В первом проекте регистры периферии почему-то объявлены без VOLATILE, что приводит к неправильной работе программы, когда она Release, а не Debug и со включенной оптимизацией.

В частности при настройке PLL без volatile повисало на втором цикле:
CODE
while(PLL0_PLLSTAT&0x1==1){}

В моих исходниках все хедеры с регистрами исправлены, всё работает на максимальном уровне оптимизации.

Во втором проекте автор не выложил хедеры.

---

Обнаружил, что размер данных unsigned long int не 4, а 8 байт. В ARM 4 байта, а тут 8!

Протестил остальные типы:

CODE

sizeof(unsigned char)=1
sizeof(unsigned short int)=2
sizeof(unsigned int)=4
sizeof(unsigned long int)=8 - НЕ СОВМЕСТИМО С ARM !!!
sizeof(unsigned long long)=8


При портировании это надо учитывать!

---

Токи потребления на частоте ядра 456 МГц, SDRAM 152 МГц при выполнении MemTest:

Ядро 1.3V: 210 мА - пиковое значение
Периферия 3.3V: 90 мА - пиковое значение

C6745 и SDRAM слегка тёплые.
LDO на 1.3V сильно тёплый - пиковая рассеиваемая мощность на нём 0.777 Вт = (5 V - 1.3 V)*0.21 A

Как я говорил уже, на отладочной плате предусмотрены перемычки для исключения штатных LDO и запитки от других источников питания - к примеру, от более экономичных DC/DC.

Автор: Gospodin_Riba Mar 4 2019, 06:01 AM
Сорец проекта под CCS для тестирования SDRAM.
В папке Release готовый bin для загрузки по UART (сгенерен AISgen-ом).

Автор: Gospodin_Riba Mar 4 2019, 06:03 AM
Тест проходит успешно, по вопросам приобретения печатных плат - пишите мне в личку.

image

Автор: romanetz Mar 4 2019, 11:54 AM
Есть tms320c6713, а вот насчёт корпусов и расположения выводов - большой вопрос. Так бы взял платку, если подойдёт. С McBSP поиграццо и миди-синтезатором.

Автор: Gospodin_Riba Mar 5 2019, 02:37 PM
Доработал тестилку SDRAM, на другом форуме подсказали, что память ещё надо протестить на корректность рефреша и с включенным кешированием.

Рефреш проверяется многократным чтением каждой ячейки - после первого чтения ячейка SDRAM разрушается, а refresh-цикл её восстанавливает. Если этого не происходит и из ячейки при чтении со второго раза и далее читается не то что записали - значит SDRAM бракованная или что-то не так.

Тест с рефрешем успешно проходится. smile.gif

С кешированием пришлось повозиться. Задействовал пока кеширование данных.
Архитектура C6745 имеет в 2 раза больше кеша - 32 кБ против 16 кБ у STM32.
А так же есть кеш второго уровня - L2 - до 256 кБ.
так что STM32 курят biggrin.gif

Ниже функция, для кеширования областей SDRAM - ничего сложного: курение референс-мануала делает своё дело:
CODE
void Enable_DCache(void) //Enable D-Cache
{
L1DWB=0x01;  //Flush L1D
L1DCFG=0x07; //Reconfigure L1D to default state (full cache)

L2CFG=0x3;   //128 kB L2

MAR192=0x00000001; //0xC0000000..0xC0FFFFFF cacheble
MAR193=0x00000001; //0xC1000000..0xC1FFFFFF cacheble
}


Включение кеша первого уровня L1D - дало ускорение в 3..3.5 раза (в зависимости от теста)
Включение кеша второго уровня 128 кБ - L2 дало ускорение на 20..25%
leb.gif support.gif

Ниже сорец усовершенствованной тестилки SDRAM:

Автор: Gospodin_Riba Mar 5 2019, 02:42 PM
Далее я попробовал грузиться не по UART, а через SPI EEPROM.

В наличии оказалась CAT25256 в DIP-корпусе. Встал вопрос о её прошивке, можно было шить самим C6745, но для этого пришлось писать прошивку для работы с SPI и UART и хост-программу для ПК. Это долго, а хочется как можно быстрее увидеть результат! biggrin.gif

Поэтому было решено приспособить для этого программатор USB ASP v2.0, имевшийся в наличии.
Дефолтная прошивка программатора работает только с AVR-контроллерами.

Но умельцы (кстати, большое им спасибо! mol.gif ) смогли доработать софт программатора для прошивки микросхем памяти.

Подробнее тут: http://plc-blog.com.ua/usbasp-flash-25xxx

Пришлось искать комп с LPT портом и шить USB ASP самопальным программатором:

Автор: Gospodin_Riba Mar 5 2019, 02:43 PM
В конечном итоге, удалось залить обновленную прошивку в USB ASP и он заработал:

Автор: Gospodin_Riba Mar 5 2019, 02:43 PM
Cмострячил небольшую приблуду для SPI EEPROM:

Автор: Gospodin_Riba Mar 5 2019, 02:45 PM
Всё работает, что радует!

Пошагово, как грузить C6745 с SPI EEPROM.

1) Создаем AIS-образ для заливки в SPI EEPROM:

Автор: Gospodin_Riba Mar 5 2019, 02:46 PM
2) Открываем софт программатора (ссылку кидал выше) , открываем в нем файл прошивки и выбираем нужную память:

Автор: Gospodin_Riba Mar 5 2019, 02:46 PM
3) Прошиваем!

Автор: Gospodin_Riba Mar 5 2019, 02:47 PM
4) Переставляем перемычки B0,B1,B2,B7 как накартинке ниже - для загрузки с SPI EEPROM:

Автор: Gospodin_Riba Mar 5 2019, 02:48 PM
Подаем питание и смотрим последствия автономной загрузки с SPI памяти!

4.gif 1000000Z.gif





Автор: Gospodin_Riba Mar 5 2019, 02:50 PM
Как вы наверное догадались, что в SPI EEPROM в будущем будет свой собственный загрузчик, который будет инитить нужную периферию игровой приставки и загружать с SD-карты эмуляторы и игры в SDRAM ! 1000005W.gif

При этом следует упомянуть, что часть периферии возможно настроить в самом AISgen.

Ниже готовый образ для SPI EEPROM с целью проверки работоспособности платы - на GP0[0] мигающий светодиод. В целях минимизации потребления тока, частота ядра тут 24 МГц и всё отключено.

Автор: Gospodin_Riba Mar 5 2019, 02:59 PM
Следующим шагом, наверное будет размещение кода в SDRAM и его выполнение.
Настройка кеша кода (L1P) и замер скоростей выполнения программ с кешированием и без. smile.gif

Автор: microxa Mar 5 2019, 07:51 PM
1.8v М/c eeprom SPI шил по LPT (напаиванием проводков),
этого планшетно-сенсорного уродца на Atom Z3735F
напрямую (без буфера), через подтягивающие резюки
image
программой SPIPGMW
Стояла 8метровая GigaDevice GD25Q64. Скорости оч. дикие:
запись 3минуты, чтение 4

Хотя USB ASP оч.самобытен, своей ногодрыговой эмуляцией USB протокола...

Саму прогу пришлось патчить (ибо не определяла eeprom-ку), благо она
такая маленькая (50кб).. что была мысль ее реверснуть и насадить на USB->COM шнурок
(на базе PL2303). Однако первые прогоны мигания и ногодрыга , показали нижеплинтуснейшие скоростя для подобных применений.. st.gif

Автор: microxa Mar 6 2019, 01:19 PM
А какие хорошие кодеки в него подойдут?
А то смотрю I2S вроде как есть (без подробностей):

Three Multichannel Audio Serial Ports (McASPs):
- TMS320C6745 Supports 2 McASPs
- Supports TDM, I2S, and Similar Formats [ZKB

Помнится в AWE32 стояла 8лапая i2s TDA1387, звучание было с нее кристально чистое
и волшебное (в него гналось даже FM/OPL аж с реверберацией)..

В "мобильных" х86, новый тренд - технология Intel SST(вмест мраковой HD) и все тотже рылотек:

The ALC5640 is a high performance, low power, dual I2S interface audio CODEC.
Two 24bit/8kHz ~ 192kHz I2S/PCM interface for each mono DAC and stereo DAC
Two 24bit/8kHz ~ 192kHz I2S/PCM interface for stereo ADC
I2C control interface

Представляете? вконец шизанулись, распихая его на 100500 пинов
И как бы я не заморачивался с jack-детект, так и не вышло отыметь стерео вход.
Ток моно... с микрофона... (впрочем что еще было ожидать от косоглазых 3.14д@р@сов)

да уж smile.gif

Автор: romanetz Mar 6 2019, 02:21 PM
АЦП AK5394 можно

Автор: Gospodin_Riba Mar 7 2019, 12:19 PM
QUOTE (microxa @ Mar 5 2019, 07:51 PM)
1.8v М/c eeprom SPI шил по LPT (напаиванием проводков),
этого планшетно-сенсорного уродца на Atom Z3735F
напрямую (без буфера), через подтягивающие резюки

Нормальное решение. Ведь сделать программатор - не самоцель, а вспомогательный инструмент.

QUOTE
А какие хорошие кодеки в него подойдут? А то смотрю I2S вроде как есть (без подробностей):

Да всё что угодно! Я ещё не определился, что будет для звука. Хочется проще что-нибудь. Нужен только вывод звука. Микрофон не нужен.

Автор: Gospodin_Riba Mar 7 2019, 12:25 PM
Запустил кеш инструкций и программу в SDRAM. Полет нормальный.

Включение кеша L1P:
CODE
#define CACHE_0_REGS 0x01840000u
#define L1PCFG (*(volatile unsigned int*)(CACHE_0_REGS+0x20))

void Enable_ICache(void) //Enable I-Cache
{
L1PCFG=0x07; //Reconfigure L1P to default state (full cache)
}


В SDRAM программа загружается AISgen-ом, если секции программы объявить что они в SDRAM (править CMD-файл в проекте).

Попробовал принудительно отключать кеши и сделал замеры:
QUOTE
L1P  L1D  L2    время выполнения
0        0      0  - 30 секунд
1      0      0  - 14 cекунд
0      1      0  - 12  cекунд
1      1      0  -  2 секунды
0      0      1  -  3 cекунды
1      0      1    -  3  cекунды
0      1    1    -  2  секунды
1      1      1    - 2  cекунды 


Попутно перешёл на CCS v.6, которая поддерживает обновление через интернет и скачал свежую версию компилятора C6000 8.3.3 которая как оказалось, понимает диалект C99, и я этому очень рад!!! 1000000Z.gif 1000000V.gif

Ну и с выкидыванием мёртвого кода разобрался.

Автор: microxa Mar 8 2019, 09:04 AM
Наткнулся на любопытный манускрипт (начало нулевых),
https://www.veron.nl/wp-content/uploads/2014/01/FmDemodulator.pdf
ориентирован еще на старенький
Signal Processor TMS320C6711, в котором его описывают как

QUOTE

Key Features
150-MHz C6711DSP capable of executing 900 million floating-point operations per second
(MFLOPS)

и чего на них персоналок не делали..
только платки с LPT (ляпота)
https://www.picclickimg.com/d/w1600/pict/123205955841_/Texas-Instruments-DSP-Starter-Kit-TMS320C6711-DSK-Development.jpg
Можно сказать, гигафлопсник(и без радиаторов охлаждения).

Сколькож тогда дури в TMS320C6745..

Автор: kotu Mar 10 2019, 01:42 AM
полезный донор от мерседеса радар, часто водой заливают, за бампером 2 стоят

http://i-fotki.info/25/561af17c662394d29556261b3c1638774d795b334831169.jpg.html
http://i-fotki.info/25/5ec85bd40612e7b469ac30411e84390c4d795b334831525.jpg.html shades.gif

Автор: Gospodin_Riba Mar 10 2019, 04:32 PM
QUOTE (microxa)
и чего на них персоналок не делали..

Монополия!
QUOTE (microxa @ Mar 8 2019, 09:04 AM)
Сколькож тогда дури в TMS320C6745..

Даташит!

Автор: Gospodin_Riba Mar 10 2019, 04:35 PM
QUOTE (kotu @ Mar 10 2019, 01:42 AM)
полезный донор от мерседеса радар, часто водой заливают, за бампером 2 стоят

Один БГА, другой слабачок.
В чём их полезность в контексте темы форума?

Автор: Gospodin_Riba Mar 10 2019, 04:41 PM
Приобрёл TFT LCD такой:
https://www.electrodragon.com/product/3-5-320x480-tft-lcd-module-for-arduino-8-bit-parallel/
3.5” 320x480 TFT LCD Arduino Shield, 8-bit Parallel, ILI9486

По качеству картинки оказался таким же говном как и мой аруиновский дисплей 320x240, недостатки всё те же:
http://vrtp.ru/index.php?showtopic=30174&view=findpost&p=786821
Пикча:
http://vrtp.ru/index.php?act=Attach&type=post&id=786821

Но для первого старта пойдёт.

Решил увеличить разрешение, чтобы с краёв не срезать, так как эмуляторы Capcom Play System имеют более широкий кадр, чем 320x240

Подключил его ко второй(точнее -первой) параллельной шине EMIFA (8 бит).
На второй шине EMIFB (16 бит) висит SDRAM на 32 МБ.

Составил программу, настроил кеширование, проинитил шины, клоки,,,..... Разместил всю программу в SDRAM, вроде всё работает: leb.gif support.gif 1000000V.gif

Автор: Gospodin_Riba Mar 10 2019, 04:46 PM
Сейчас отрисовкой занимается C6745. С применением DMA или PRUSS - отрисовка становится параллельной и не мешает C6745 и SDRAM (шины раздельные и одновременно).

PRUSS - это ещё 2 процессора внутри TMS-ки - работают на частотах вдвое меньшей, чем 6745.
По сути на них можно сбацать графический фильтр и рендерер, что здОрово разгрузит основной процессор! spiteful.gif biggrin.gif

Про PRUSS с чем их едят:
http://processors.wiki.ti.com/index.php/Programmable_Realtime_Unit_Subsystem

image

Это довольно вещь в себе, для них отдельная системакоманд и свои компиляторы (ассемблер).
Сильными стараниями находятся доки, компиляторы и примеры как программировать.


Автор: Gospodin_Riba Mar 10 2019, 04:48 PM
Видео, отрисовка картинок размером 1/4 площади дисплея. Тут используется 64-битная передача данных в порты LCD:






Автор: Gospodin_Riba Mar 10 2019, 04:51 PM
В будущем, планирую искать другой дисплей 480x320 с лучшим качеством картинки. Может кто подскажет модели телефонов из которых можно снять дисплей с таким разрешением?

Появилась проблема с загрузкой программ по UART0. То грузится, то нет. Выдаёт ошибку таймаута по COM-порту.

Пока проблему обошёл сменой UART, теперь гружусь с UART2 - с ним загрузка идёт стабильно.

Карта соединений такая:

UART2_RXD - GPIO 5.12
UART2_TXD - GPIO 5.13

Положение перемычек на плате Mini6745, чтоб грузиться с UART2:

B2=0
B7=1
B0=0
B1=1

Автор: Gospodin_Riba Mar 10 2019, 04:58 PM
Про результаты подключения LCD 320x480 смотрим на предыдущей странице!

Карта подключений дисплея к EMIFA:

EMIFA GPIO
D0 .. D7 0.0 .. 0.7
A12 1.12
!WE 2.3
!CS2 2.5
!OE 2.7
! RESET 5.10

Ниже исходник всего проекта с дисплеем (контроллер ILI9486).
Загружается UART Boot Host-ом в SDRAM.

Автор: Gospodin_Riba Mar 16 2019, 11:41 AM
QUOTE (Gospodin_Riba @ Mar 10 2019, 04:51 PM)
Появилась проблема с загрузкой программ по UART0.  То грузится, то нет.  Выдаёт ошибку таймаута по COM-порту.

Пока проблему обошёл сменой UART, теперь гружусь с UART2 - с ним загрузка идёт стабильно.

Причина проблемы обнаружена и блестяще устранена.

Подтяжек в 10 кОм (на плате 9,1 кОм) - оказалось недостаточно. Напряжение на пинах было 1.8V. Для логической "1" надо больше. Поставил подтяжки 1,1 кОм - напряжение лог. "1" стало в норме: 3 - 3.2 V.

Попутно выяснил, что и с логическим "0" было тоже не всё впорядке - иногда напряжение на пинах было 1.4 V. Подтянул резистором 1 кОм на GND.

Теперь грузится с UART0 и с UART2 (с какого угодно)! И я рад! А то загрузка через UART Boot Host иногда капризничала по вышеназванным причинам.
biggrin.gif 1_7.gif spiteful.gif

А теперь о новом!

1) Поднял отрисовку через EDMA - теперь процессор может заниматься другими вещами и отрисовка идёт впаралель!

2) Сделал таймер и поднял прерывание от него. Это позволило делать замеры тестов на отрисовку.

При установленной шине EMIFA впритык и оптимальными времянками на дисплей, число кадров в секунду получилось таким:

CPU рисует 101 кадров в секунду
DMA - 108 кадров в секунду.

Разрешение 480x320, 2 байта на точку. Шина - толщиной байт.

3) Поднял SPI и портировал инит SD-карты. Поддерживаются только SDHC и SDXC. Древние SDSC (менее 2 ГБ) - НЕ поддерживаются! Можно было и их поддержать, но мне лень smile.gif

Ах, да, SD карту подцепил на SPI, потому что Техасцы - паразиты - сделали пины на SDIO пересекающимися с EMIFA. Яотдал предпочтение EMIFA - всё-таки лучше оставить скоростную отрисовку в дисплей.

Но это ещё не окончательное решение. Тут витают мысли через PRUSS сделать обмен с дисплеем через кастомные GPIO. Но это надо изучать. Карта SD при этом цепляется на SDIO, который кстати - 8 битный, только вот все 8 бит можно только в картах eMMC задействовать. Поэтому если и будет, то только в 4-битном исполнении smile.gif

Ниже сорец проекта для CCS v.6 - по сути - прототип SDK на C6745 от Рыбы. smile.gif

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

Автор: Gospodin_Riba Mar 16 2019, 11:43 AM
Кто написал мне письмо в личку по вопросу о конвертации - напишите мне снова, я письмо затёр случайно, не могу ответить отправителю!!! 1000005F.gif

Автор: microxa Mar 16 2019, 02:29 PM
Gospodin_Riba а процессор вы припаивали "микроволной"?

QUOTE

PRUSS - это ещё 2 процессора внутри. Это довольно вещь в себе, для них отдельная системакоманд.

прелюбопытно, да
http://processors.wiki.ti.com/index.php/PRU_Assembly_Instructions
в целом продумано, стандартные лог. операции, даже min/max.
Вот это действительно, полезная многопроцессорность. (чего нехватало в интел, хотяб 8051-ых, на перефирии, на порту LPT и т.п. а не фейковых ядер по типу HT)
Прееелестно-прелееестно... support.gif
А вот ноут/нетбучные моники с lvds наверно нереально заюзать.. (там дифф.пары clc x 2, data_0-data3 x2 )
Хотя тоже, не угадаешь, долго пришлось привыкать к дешовке как гнус N100: экран хоть и матовый, но блеклый и углы обзора жуть. А когда другой собирал(N150-ый), то подвернулись остатки от более древней модели nc10. Запилил его (от нечего делать: и был, приятно шокирован, сочной и четкой картинкой (особенно в 80х25), нормальным углом обзора.
стало понятно почему NC10-ый стоил 400эвров.. gggg.gif

Автор: Gospodin_Riba Mar 18 2019, 09:17 AM
QUOTE
а процессор вы припаивали "микроволной"?

Нет, обычным игольчатым жалом, сточенным по диагонали "лопаткой". При пайке использую флюс котоый якобы из США, но на самом деле китайская подделка. Очень понравилось - припой реально растекается красиво по ножками и не слипается. Единственно, глаза потом 2 дня болят, если флюса много попало - ощущение как будто нагадили в глаза. И с рук смывается только спиртом, мыло не смывает. Но в отличие от канифоли - флюс полностью прозрачный и легко оттирается спиртом.

QUOTE
А вот ноут/нетбучные моники с lvds наверно нереально заюзать.. (там дифф.пары clc x 2, data_0-data3 x2 )

С6745 не имеет LCD контроллера. Только шины. Может лвдс как-то можно,но это выходит за сферу моих интересов.

QUOTE
гнус N100: экран хоть и матовый, но блеклый и углы обзора жуть.  А когда другой собирал(N150-ый), то подвернулись остатки от более древней модели nc10. Запилил его (от нечего делать: и был, приятно шокирован, сочной и четкой картинкой (особенно в 80х25), нормальным углом обзора. стало понятно почему NC10-ый стоил 400эвров

Да, с дисплеями проблема: надо смотреть их в действии и потом покупать! Когда я брал Ардуино-дисплей 480x320 я подумал: "дам ка я шанс исправиться Ilitek'у - производителю дисплея", может дисплеи бОльшего чем 320x240 разрешения -они выпускают нормальные.... Нифига! Как были говном - так и остались! Более LCD с Ilitek-овскими контроллерами (это которые на ILI**** начинаются) -НЕ ПОКУПАЮ. Все они - говно одного сорта.

Утилита от TI для раскидывания пинов на C6743/45/47 omap-L137,полезная вещь - сокращает время :

Автор: Gospodin_Riba Mar 18 2019, 09:23 AM
Портировал 3D Туннель на C6745.
Оказывается, этот процессор не умеет делить плавучку! Только умножать. Но на другом форуме профи подсказали, что есть инструкция 1/X которая поддерживается аппаратно. В итоге все фрагменты деления я переписал, заменив их умножением.

Вместо a/b надо a*rcp( b )

Пока это не сделал, туннель ворочал со скоростью 5 кадров в секунду.

Сейчас летает! Кадр 320x240 16 бит на точку, текстура 512x512 , всё во внешней памяти - выходит 129 FPS ! Если уменьшить текстуру вчетверо 128x128, то будет 178 FPS.

STM32H743 давал в 2 раза меньше !






Автор: Gospodin_Riba Mar 18 2019, 09:26 AM
Ну и на полный Экран: 480x320, тут уже 89 FPS. Хоть и площадь экрана возросла ровно в 2 раза, но FPS просел всего лишь в 1,5 раза - это DMA помогает, впараллель отрисовывает.

В целом виртуально C6745 выходит в 2 раза шустрее, чем STM32H743. Так что гипотеза о том, что этот DSP порвёт ARM-ы - оправдалась! biggrin.gif spiteful.gif






Автор: Gospodin_Riba Mar 18 2019, 09:28 AM
Исходники Туннеля. В Release готовая прошивка *.bin и ассемблерные листинги(очень познавательно их читать smile.gif

Автор: microxa Mar 19 2019, 12:41 AM
Gospodin_Riba
QUOTE

профи подсказали, что есть инструкция 1/X которая поддерживается аппаратно. В итоге все фрагменты деления я переписал, заменив их умножением.

Вместо a/b надо a*rcp( b )

прикольно, прокатывает и на x86 smile.gif https://pastebin.com/sjKD73xM
эх, сложноват Toonel чтоб его глянуть на DirectX

QUOTE
готовая прошивка *.bin и ассемблерные листинги(очень познавательно их читать

Оптимизация однако, шикарная.. Регистров конечно от души, не то что, кот наплакал у х86 (32бит режиме)

Автор: Pav-ru Mar 21 2019, 09:27 AM
QUOTE (Gospodin_Riba @ Mar 16 2019, 11:43 AM)
Кто написал мне письмо в личку по вопросу о конвертации - напишите мне снова, я письмо затёр случайно, не могу ответить отправителю!!! 1000005F.gif

Gospodin_Riba!
Я продублировал в личку вопрос по поводу конвертации.
Вы получили? reading_help.gif

Автор: Gospodin_Riba Mar 22 2019, 04:03 PM
QUOTE (Pav-ru @ Mar 21 2019, 09:27 AM)
Я продублировал в личку вопрос по поводу конвертации.
Вы получили? reading_help.gif

Нет! От вас ничего в личку не пришло.

Автор: Gospodin_Riba Mar 22 2019, 04:07 PM
Я тут разгадывал квест по поводу того какой контроллер стоит в LCD и насколько трудно найти доки. smile.gif

Итак, мой выбор пал на этот раз на LCD от сотового телефона LG GX500. Отличный LCD с хорошими углами и яркой картинкой! Ардуино-говно-LCD и рядом не валялись! И за 200 рублей вместе с телефоном б/у который на запчасти!

Донор:

Автор: Gospodin_Riba Mar 22 2019, 04:08 PM
Плата сзади:

Автор: Gospodin_Riba Mar 22 2019, 04:14 PM
Разъем дисплея - 40 контактов, марка GB042-40P-H10-E3000

Этот дисплей гуляет под целими тремя вариациями - две из которых:

1)
LS030B3UW01(3.0"), (400*240) B grade
DRIVER IC ( S6D14E0// SAMSUNG IC . PA7556 . MAGNA CHIP)

2)
Парт-номер: SVLM0035201
Parts Description: LQ030B3UX01,Main ,3.0 inch ,240*400 ,43.08*75.4*1.8t ,262K ,TFT ,TM ,S6D14E0 , ,

Ваапще не подошли!!! mat.gif mat.gif bouncefire.gif bouncefire.gif До одури ночами сидел 2 суток пытаясь их запустить по даташитам (качаются с барыга-сайтов китайских после получения бизнес-аккаунта).

Мои посты на ардуйе:
http://arduino.ru/forum/apparatnye-voprosy/arduino-i-displei-ot-sotikov-mobilnykh-telefonov?page=49

Начиная с середины.

Автор: Gospodin_Riba Mar 22 2019, 04:15 PM
А вот и разгадка - в прошивке на телефон глянул - там full Debug со всей информацией:
spiteful.gif 1_7.gif

Автор: Gospodin_Riba Mar 22 2019, 04:22 PM
По этой информации откопал даташит и инит с китайских сайтов. Дисплей запустился! Ура!!! sport_boxing.gif leb.gif А я уже хотел логический анализатор покупать чтобы сдампить с телефона команды-данные

Автор: Gospodin_Riba Mar 22 2019, 04:25 PM
Далее попробовал поиграться с Туннелем - прикрутил билинейную фильтрацию в реальном времени - теперь из текстуры размером 128 на 128 делается стретч на весь экран. Раньше фильтрации не было, либо бралась огромная текстура 512 на 512.

Выжимал все соки и оптимизировал пиксельный шейдер. Скажу сразу, что софтваный текстурный мэппинг - неблагодарное дело - куча глюков всплывает из-за арифметики с плавучкой. В основном из-за потери точности.

Вот вначале фильтр работал неправильно:

Автор: Gospodin_Riba Mar 22 2019, 04:27 PM
Выжал 86 FPS с площадки 400x240 - это с фильтрацией текстуры в реальном времени:






STM наверное бы давно загнулся )))

Автор: Gospodin_Riba Mar 22 2019, 04:29 PM
Сорцы проекта. Сделан переход на вышеназванный LCD 400x240.

Автор: microxa Mar 22 2019, 11:21 PM
Ну просто беспрецендентнейший квест!! vo.gif

Раскурить такой старенький дисп о котором наверно уже ни в LG ни в SHARP уже не знают..

А он же вроде как сенсорный? или сенсор там в защитном стеклышке.

Ну вообще.. Какаято фантастика. Особенно припаять такой разьемчик..
Просто высший пилотаж..

Автор: Pav-ru Mar 24 2019, 02:13 PM
QUOTE (Gospodin_Riba @ Mar 22 2019, 04:03 PM)
QUOTE (Pav-ru @ Mar 21 2019, 09:27 AM)
Я продублировал в личку вопрос по поводу конвертации.
Вы получили? reading_help.gif

Нет! От вас ничего в личку не пришло.

Продублировал ещё раз!

Автор: Gospodin_Riba Mar 25 2019, 01:57 PM
QUOTE
А он же вроде как сенсорный? или сенсор там в защитном стеклышке.

Нет. Сенсор и дисплей отдельно. Сенсор заинтегрирован в переднюю часть корпуса и только выламывается. Соединяется с платой микроразъемом. А дисплей там просто приложен к обратной стороне сенсора - и слава Богу !!! mol.gif mol.gif mol.gif А то на моем опыте были дисплеи с приклееной сенсорной панелью! И отодрать такую панель - большой риск.

QUOTE
Какаято фантастика. Особенно припаять такой разьемчик..
Просто высший пилотаж..

Основная проблема как раз не припаять разъем - это делается довольно легко с нужным флюсом. Основная проблема сделать макетку с такими дорожками (0.27). Я знаю, сейчас набегут и начнут про фоторезист толкать smile.gif Но у меня на данный момент нет оборудования для УФ травки плат, поэтому старый ЛУТ. И то под вопросом - бумагу разобрали в магазинах, пришлось из журналов глянец искать. Вот на инструкции от усилителя хорошо пропечаталось, и бумага вся сразу отстала - не пришлось счищать вообще. Но иголочкой поработать пришлось - разделять слипшиесядорожки smile.gif

Позже новое напишу, сегодня к сожалению интернет мне не улыбается angry.gif

Автор: Gospodin_Riba Mar 25 2019, 01:59 PM
QUOTE (Pav-ru @ Mar 24 2019, 02:13 PM)
Продублировал ещё раз!

Очень странно. Ничего не приходило. От других приходят.

Создайте тему на форуме со своим вопросом.

Автор: Pav-ru Mar 25 2019, 07:21 PM
QUOTE (Gospodin_Riba @ Mar 25 2019, 01:59 PM)
QUOTE (Pav-ru @ Mar 24 2019, 02:13 PM)
Продублировал ещё раз!

Очень странно. Ничего не приходило. От других приходят.

Создайте тему на форуме со своим вопросом.

Может это модераторы чем-то не довольны.
Я, вроде, правила не нарушаю и первый раз, всё же дошел в личку.
Очень странно!
Так я попробую в эту же тему написать...

Автор: Pav-ru Mar 25 2019, 07:42 PM
Итак, имеется устройство:
китайский LCD дисплейчик TXW200035P0-CD (320 Х 240) IC:ILI9342C, управляется по SPI чипом от Nordic - NRF52832 (получаю по BLE файл, сохраняю в дополнительную Flash и с помощью этого же чипа передаю файл на дисплей).
Сам NRF52832 не блещет быстродействием (пока получил только 5 кадров в секунду), но уверен, что можно и без дополнительных элементов ускориться.

Подскажите, пожалуйста, как добиться хорошей скорости (использование DMA, конвертация и пр.)?

Автор: romanetz Mar 25 2019, 07:45 PM
хм. резонно - выкинуть spi, перейти на параллельную шину. ускорение на порядок сразу.

Автор: Gospodin_Riba Mar 26 2019, 01:50 PM
Раньше были доступны инженерные образцы этого DSP и название начиналось на TMX (а не TMS).
Были версии только на 300 МГц и содержали очень много багов.
Хорошо, что это всё в прошлом! smile.gif

Автор: Gospodin_Riba Mar 26 2019, 01:53 PM
Удалось немного поднять FPS в туннеле путём оптимизирования алгоритма программы.
С 86 поднял до 92 FPS. smile.gif

Исходники ниже:

Автор: Gospodin_Riba Mar 26 2019, 02:00 PM
Написал новую программу - вращающийся 3D КУБ smile.gif
С текстурированными гранями и с освещением.

Что-то наподобие вот этого: https://www.youtube.com/watch?v=z1BzobSpXq0&t=300

Тут уже кроме текстурирования расчитывается освещение и отсечение невидимых полигонов(чтоб их не отрисовывать). Что даёт выигрыш до 50% в случае куба.

В видео ниже синхронизация кадров от таймера и всегда 60 FPS:








Автор: Gospodin_Riba Mar 26 2019, 02:02 PM
Pico-8 Cube:






Исходники ниже:

Автор: Gospodin_Riba Mar 26 2019, 02:03 PM
Здесь максимальная производительность - без синхронизации по таймеру. Максимально возможная производительность на данный момент времени:

На предыдущей странице ответил.







Автор: Gospodin_Riba Mar 26 2019, 02:09 PM
Кстати, девелоп-среда CCS для DSP уже давно свободна и без ограничений:

http://processors.wiki.ti.com/index.php/Download_CCS#Free_license_for_older_versions

leb.gif 4.gif

Автор: Pav-ru Mar 26 2019, 03:29 PM
QUOTE (Gospodin_Riba @ Mar 26 2019, 01:47 PM)
QUOTE (Pav-ru @ Mar 25 2019, 07:42 PM)
Итак, имеется устройство:
китайский LCD дисплейчик TXW200035P0-CD (320 Х 240) IC:ILI9342C, управляется по SPI чипом от Nordic - NRF52832 (получаю по BLE файл, сохраняю в дополнительную Flash и с помощью этого же чипа передаю файл на дисплей).
Сам NRF52832 не блещет быстродействием (пока получил только 5 кадров в секунду), но уверен, что можно и без дополнительных элементов ускориться.

Подскажите, пожалуйста, как добиться хорошей скорости (использование DMA, конвертация и пр.)?

Насколько мне известно, максимальная частота SPI у NRF52832 8 МГц. Теперь считаем сколько кадров можно отрисовать за1 секунду с помощью DMA или CPU:

1 кадр: 320x240x16 = 1228800 бит данных
SPI дает 8000000 бит/c

Поделив одно на другое получим: 0.1536 с - или 6,5 FPS. Выше этого не прыгнешь.
И то это без учёта assert-ов и deassert-ов линии !CS, которая как правило тоже занимает некоторое время.

Тут как либо менять дисплей, либо контроллер. Лучше - и то и другое.

Конвертация тут не поможет, если дисплей не поддерживает приём данных в режиах меньшей разрядности, чем 16 бит. Старые дисплеи могут работать в 8 битовом режиме.

Менять на дисплей с меньшим разрешением?
Или что вы имеете ввиду?

Автор: Gospodin_Riba Mar 27 2019, 08:15 AM
Туннель под винду. http://www.sulaco.co.za/opengl_project_racing_tunnel.htm
Вместе с исходниками на Object pascal (Delphi). Под Open GL.
Микроху наверное заинтересует )))

Автор: Gospodin_Riba Mar 27 2019, 08:33 AM
Озадачился выбором микросхемы для звука.

SPI заняты, остаются I2S и McASP и I2C(TWI). Что можно прицепить компактное?

Желательно с усилком 0.5 - 1 Вт

Нужен только ВЫВОД звука в динамик, наушники. QFP или малоножечный QFN на худой конец.

Автор: microxa Mar 27 2019, 05:52 PM
Gospodin_Riba, знаю я этот Tunnel. Только он OpenGL-вский..
Интересовал кстати больше Ваш, порт под DOS, как я понял он собран на Watcom C99.
Данного компилятора не было, но тем не менее код был успешно собран как на GCC3.4.6 так и на Intel C++ 8.0 .

Полученые O/OBJ-ы были не менее успешно слинкован внутренним COFF компоновщиком FreePascal 3.0.4 в Win32 прикладуху. Через вот такой вот враппер:
https://pastebin.com/0ge66y8z
и вау - оно даже стартануло. но не надолго - потом ошибка какаято в делении на 0 spiteful.gif
С ходу не смог разобраться в том число и мозгодробительном кодесе. Ну да ладно, хоть так smile.gif

Автор: Gospodin_Riba Mar 28 2019, 04:36 AM
Рекомендую плотно освоить C(просто С без ++), потому что у Pascal очень сильно хромает оптимизация и адресная арифметика указателей у него очень слабая.

Единственный способ расшевелить паскалевские программы - переписать на ассемблере критичные части кода. На Си это делается проще: -Ofast -O3. У меня тотже туннель идёт на C быстрее чем паскалевские варианты с асм-вариантом линии

Автор: microxa Mar 28 2019, 09:45 AM
Gospodin_Riba, произошла некоторая непонятка. Код для DOS был взят из темы "дисплеи от сотиков". Компилировал tunnel.c довольно мегамощными компиляторами Cи, а фри-паскаль использовался как COFF линковщик PE Win32приложения и выводильщик BMP имеджа на HDC окна FAR)))) Поэтому и вверх тормашками получилось Так что никакой Vesa и паскаль указателей... 1_7.gif
QUOTE

Рекомендую плотно освоить C(просто С без ++)

хорошо.. а с паскаля на Си переносил SIMD-шный код DDraw движка
както так.. вот.. shades.gif
https://pastebin.com/JGwzFM28

Автор: ведущий специалист Mar 29 2019, 09:52 AM
QUOTE (Gospodin_Riba @ Mar 27 2019, 08:33 AM)
Озадачился выбором микросхемы для звука.

SPI заняты, остаются I2S и McASP и I2C(TWI). Что можно прицепить компактное?

Желательно с усилком 0.5 - 1 Вт

Нужен только ВЫВОД звука в динамик, наушники. QFP или малоножечный QFN на худой конец.

Бери ALC5621, достаточно неплохой и дешевый кодек. единственный минус - динамик моно канал качает в остальном супер. На али ведро за рубль.

Автор: Kitano8 Mar 29 2019, 10:13 AM
Еще вариант CS43L22 c F4-disco или CS42L52.

Автор: octus Mar 29 2019, 08:11 PM
господин рыба ответьте мне в личку

Автор: Gospodin_Riba Mar 30 2019, 04:33 PM
Я долго думал какой кодек использовать для звука и пришёл к выводу, что они все избыточны: хренова туча каналов: на вход, на выход. Большое число ног, внутренняя сложность!

Хотелось чего-то простого и в то же время отличного по характеристикам.

Потом вспомнил, что у меня есть несколько комплектов для сборки Adlib (OPL 2/3) и OPL4 + MPU401 MIDI.

Вот таких:

Автор: Gospodin_Riba Mar 30 2019, 04:34 PM
В своё время даже Audio Jam делал из VS1003 + YMF721 - эта сборная солянка играла весь раритет + современные звуковые форматы.

Вот фрагмент схемы звуковой карты, которую делал:

Автор: Gospodin_Riba Mar 30 2019, 04:35 PM
Накидал печатку: I2S ЦАП YAC512-E и мостовой УНЧ(как в EMU-Pocket).
Ничего лишнего - только по делу!

Это 16-битный ЦАП до 48 кГц с семпл-рейтом. Для приставки хватит за глаза!
Даташит: https://pdf.datasheet.live/55ce090f/toko.com/YAC516-E.pdf

У китайцев их целые вёдра.

Теперь надо McASP осваивать - как его в I2S перекинуть и через DMA поднять кольцевой буфер:

Автор: Gospodin_Riba Apr 2 2019, 01:21 PM
Пришлось пободаться в полный рост с McASP и сопутствующей ему периферией (Audio FIFO, прерывания, DMA). Всё очень сложно. Пришлось вкуривать мануалы, примеры в интернете есть, но они есть калокубовские нагромождения CSL или TI-BIOS.

Проблемы были такие:

1) Непропай ноги питания и одной управляющей (YAC516) - заметил не сразу, так как был уставший.

2) Непонимание трактовки делителей частоты в мануале - пришлось вооружится частотомером/периодометром и смотреть каждую ножку McASP.

Добился того, чтобы MCLK=12 МГц, BITCLK=MCLK/4=3 МГц, LRCLK=BITCLK/(2 slot * 32 bit) = 46.875 кГц - отличается от стандартных 48 кГц немного. На слух не особо заметно.

Это соответствует режиму: MCLK=256*fs.

Можно выставить режим MCLK=384*fs (MCLK/BITCLK=6), тоже работает (проверял), но тогда число вариантов частот семплирования уменьшается. Оставил первый вариант.

3) Отсутствие потока данных на SDATA - осциллографа у меня нет, пришлось понижать частоты до звуковых (выставил большие делители) и с помощью наушников, резистора и конденсатора - на слух слушал частоты со всех ног McASP:

- MCLK - частота самая высокая
- BITCLK - частота в 4 разаниже
- LRCLK - очень низкая частота
- SDATA - шум


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

5) Подбор остальных параметров формата. В этом аудио-ЦАП (YAC516) - не совсем чисто-I2S, скорее пародия на него (например, нет синк-бита перед сигналом фрейма, защёлкивание данных по спаду, не по фронту,... ит.п.)

6) Запуск DMA и буфер FIFO с максимальной настройкой в 64 аудио-слова. Выпило всю кровь! Автомат настолько сложный, что на его освоение потратил 2 дня.

7) Особый геморой доставило включение прерывания ОТ DMA - не хотело долго включаться, так как в мануалах расплывчато сказано о взаимосвязи теневых регионов и разрешением прерывания..... Проехали, включилось! smile.gif

В итоге, всё пашет, как было и задумано! spiteful.gif

Вот такая "звуковая карта" вышла:

Автор: Gospodin_Riba Apr 2 2019, 01:23 PM
Схема включения:

Автор: Gospodin_Riba Apr 2 2019, 01:27 PM
Пруф и исходники ниже. support.gif 1000000Z.gif

Из недостатков McASP - двойной перерасход буфера на Stereo, в случае если нужно Mono. А так всё пашет здОрово, пришлось применить трюк со смещением в трансмиссии DMA, чтобы воспроизводить 16-битные семплы, вместо 32-битных.








Автор: Gospodin_Riba Apr 3 2019, 04:30 PM
QUOTE (Gospodin_Riba @ Apr 2 2019, 01:27 PM)
Из недостатков McASP - двойной перерасход буфера на Stereo, в случае если нужно Mono.

Удалось обойти этот недостаток, путём задания одного тайм-слота. Получается из I2S сделал I1S smile.gif И на второй канал память не требуется.

Кроме того, наконец-то покорил EDMA3 полностью - включил его в режиме 3D - теперь доступны все три измерения (ACNT, BCNT и CCNT) spiteful.gif А это значит, что в случае аудио, нам доступно разом передать блок размером:

2..4 байта (семпл) * 64 семпла (Audio FIFO) * 65535 порций - это около 8 МБ !!! Только вдумайтесь - одна транзакция через DMA максимально длинной около 8 МБайт!!! Такого DMA я ещё не видел... Во всех ARM-ах, включая STM32 максимальный размер блока всего 64 кБ.

Проверял на загрузке больших аудиоданных - работает. Основная проблема была перевести EDMA3 в режим ABC- через Self-Chained, чтоб по трём измерениям работал и тактировался от эвентов McASP (а не сам по себе копировал данные)

STM32 очередной раз курит в сторонке, нервно кусая ногти 1_3.gif

Переношу H264 проигрыватель...

Автор: Gospodin_Riba Apr 12 2019, 12:52 PM
Сделал балалайку. Всё отлично работает! 1000000Z.gif 1000000Z.gif

Параметры такие:

MP4: 400x240 16 бит на точку, 27 FPS.
MP3: 32 кГц 48 кбит/с, 1 канал
SD: 4 класс скорости , SPI 22.8 МГц

Я думал, что SPI не протащит два потока, а оказалось, что всё ОК biggrin.gif

Задействовал PRUSS (точнее PRU0) для конвертации кадров YUV в RGB и отправкой их в дисплей. Параллельность даёт выигрыш! 4.gif

Только PRUSS не поддерживает плавающую точку и работает с внешней памятью без кеширования. Даже умножать не умеет smile.gif Но это не беда - логический сдвиг + суммирование прекрасно делает умножение на любое число! Чисто RISC и Real-Time. Работает на частоте вдвое меньшей, чем C6745: 228 МГц.

Компилятор C для PRUSS от TI: clpru - говно редкостное и сырое, пришлось немного повоевать, так как делает неоптимальным код, если глядеть ассемблерный листинг.

Программирование PRUSS чем-то Z80 напомнило. sclerosis.gif

Cделал замеры - функция для отрисовки и конвертации та же самая(для C6745 и PRUSS) :

Шина дисплея 114 МГц:
декод CPU + рендер CPU : всего 29FPS
декод CPU + рендер PRUSS: всего 38 FPS

Шина дисплея 152 МГц:
декод CPU + рендер CPU : всего 31FPS
декод CPU + рендер PRUSS: всего 38 FPS

Из замеров делаем вывод: использование PRUSS позволяет снизить тактовую частоту шины LCD с сохранением производительности - потому что отрисовка идет параллельно и занимает меньше времени, чем само декодирование.,,,,

Пруф: shades.gif





Автор: Gospodin_Riba Apr 22 2019, 02:32 PM
Наконец-то это случилось! smile.gif Написан свой загрузчик, который может загружать программы с SD-карты во внешнюю динамическую память. Загрузчик также инициализирует почти всю периферию (Остается не проиниченным FPU, половинка кеша L2 и DMA для McASP - по ряду причин).

Работа на уровне файловой системы. Прикручен FatFs.

Управление- от 6-кнопочного джойстика СЕГи. biggrin.gif Опрос кнопок висит на PRUSS и работает впараллель программам.


Автор: Gospodin_Riba Apr 22 2019, 02:34 PM
Загрузчик в действии.







Автор: Gospodin_Riba Apr 22 2019, 02:35 PM
Эмулятор NES.







Автор: Gospodin_Riba Apr 22 2019, 02:36 PM
В эмуляторе добавил загрузку игр с SD карты + сохранение каждой игры в отдельный стейт.

Следующая на выдачу - SEGA MegaDrive (Genesis) 1_7.gif

Автор: microxa Apr 22 2019, 03:49 PM
QUOTE
Эмулятор NES.

А синтез, чего, пиликает?
А работает такой новодел как этот

Super Bat Puncher - Morphcat Games
morphcat.de/superbatpuncher/‎
Super Bat Puncher is an original homebrew game for the NES.
там музычка хорошая.

Автор: Gospodin_Riba Apr 22 2019, 08:34 PM
QUOTE (microxa @ Apr 22 2019, 03:49 PM)
QUOTE
Эмулятор NES.

А синтез, чего, пиликает?
А работает такой новодел как этот

Super Bat Puncher - Morphcat Games
morphcat.de/superbatpuncher/‎
Super Bat Puncher is an original homebrew game for the NES.
там музычка хорошая.

Я не понял прикола. Скачал этот новодел, но там в демоверсии совсем не то что на видеоролике, а более лажовее - нету той музычки что на видео. Запускал на ПК, эмуль FCEUX.

Автор: Gospodin_Riba Apr 23 2019, 04:16 PM
Настал тот день, когда наконец-то перенёс эмулятор SEGA MegaDrive! 4.gif 1000000V.gif 1000000Z.gif

За основу брал вот этот эмулятор и потом допиливал:
QUOTE
Genesis Plus
Version 1.2a
by Charles Mac Donald


Выбор игр также через меню + сейв на каждую игру.

Видео работы эмулятора SEGA Megadrive: https://www.youtube.com/watch?v=NY6x8q0-Xjo









Автор: Gospodin_Riba Apr 23 2019, 04:21 PM
Сразу скажу, что STM-ы тут никакие не катят вообще, по причине того, что 400 МГц не хватит чтобы воспроизводить эмуляцию тяжелых игр на фреймрейте 60 FPS.

Поэтому был задействован со-процессор (PRUSS) внутри C6745 и распараллелить алгоритм. Теперь отрисовкой занимается PRUSS, а логикой эмулятора - C6745.

Несколько лет назад делал на BF532 эмулятор SEGA, так пришлось разгонять до 600 - 700 МГц чтобы нормально шло. А тут C6745 на своих 456 МГц нормально работает впараллель с PRUSS на 228 МГц )))

Так что BlackFin BF532 сосёт, и STM32H7 тем более сосёт )))

Видео - сравнение двух режимов : без PRUSS и с ним: https://www.youtube.com/watch?v=O1g8AbYWrzE







Автор: Gospodin_Riba Apr 23 2019, 04:23 PM
Здесь показана максимальная производительность всей системы (CPU+PRUSS), убрана кадровая синхронизация. Чисто для наглядности, на практике конечно, надо с синхронизацией играть smile.gif

https://www.youtube.com/watch?v=1JhDl9Cbn9I







Автор: Gospodin_Riba Apr 23 2019, 04:25 PM
Contra Hard Corps в действии на эмуляторе SEGA Megadrive, C6745:

https://www.youtube.com/watch?v=3NkLtdYHmzg

Следующий на выдачу - SNES ! 1000000Z.gif 1000005W.gif








Автор: Gospodin_Riba Apr 23 2019, 04:27 PM
Это к вопросу о том, почему нельзя портировать SEGA MegaDrive на EMU-Pocket:
CODE
******************************************************************************
              TMS320C6x Linker PC v8.3.3                      
******************************************************************************

OUTPUT FILE NAME:   <SMD.out>
ENTRY POINT SYMBOL: "_c_int00"  address: c0000000


MEMORY CONFIGURATION

        name            origin    length      used     unused   attr    fill
----------------------  --------  ---------  --------  --------  ----  --------
 L2                    11800000   00020000  00014f34  0000b0cc  RWIX
 RO                    c0000000   000cc000  000c7ae0  00004520  RWIX
 RW                    c00cc000   01f34000  00e2a194  01109e6c  RWIX


SEGMENT ALLOCATION MAP

run origin  load origin   length   init length attrs members
----------  ----------- ---------- ----------- ----- -------
 11800000    11800000    00014f34   00000000    rw-
 11800000    11800000    00004e00   00000000    rw- .L2
 11804e00    11804e00    00010000   00000000    rw- .stack
 11814e00    11814e00    000000ec   00000000    rw- .bss
 11814eec    11814eec    00000048   00000000    rw- .neardata
 c0000000    c0000000    00000080   00000080    r-x
 c0000000    c0000000    00000080   00000080    r-x .text:_c_int00*
 c0000400    c0000400    000b0bfc   000b0bfc    r-x
 c0000400    c0000400    000aeec0   000aeec0    r-x .text
 c00af2c0    c00af2c0    00001464   00001464    r-- .const
 c00b0724    c00b0724    000008d8   000008d8    r-- .switch
 c00b1000    c00b1000    0000bbbc   00000000    rw-
 c00b1000    c00b1000    0000bbbc   00000000    rw- .fardata
 c00bcbc0    c00bcbc0    0000b2a8   0000b2a8    r--
 c00bcbc0    c00bcbc0    0000b2a8   0000b2a8    r-- .cinit
 c00cc000    c00cc000    00e2a194   00000000    rw-
 c00cc000    c00cc000    00800000   00000000    rw- .sysmem
 c08cc000    c08cc000    0062a194   00000000    rw- .far

Автор: microxa Apr 23 2019, 05:09 PM
Gospodin_Riba да уж... вот это нифига сеге...
..
не смог удержатся, чтоб не пройти квест по сборке эмуля Gens в архидревней ламповой шизюал студио 6.. до этого почемуто не получалось. какойто заклин, происходил.. а тут собралось .. аж самому странно..
Ну специфика тут больше х86-ая..

Автор: Gospodin_Riba Apr 24 2019, 01:04 PM
О том как был портирован эмулятор SEGA MegaDrive на C6745 читайте на предыдущей странице!

QUOTE
не смог удержатся, чтоб не пройти квест по сборке эмуля Gens в архидревней ламповой шизюал студио 6.. до этого почемуто не получалось. какойто заклин, происходил.. а тут   собралось .. аж самому странно..
Ну специфика тут больше х86-ая..


Святое правило: собирать проект в той среде, в которой написал его автор. Неприложная истина.

Следующий шаг - выкидаваем всё виндуозное и заменяем на микроконтроллерное smile.gif

И ещё, данный эмулятор не на асме частично? smile.gif Если часть на асме и нет того же кода на С, то можно забить.

Автор: microxa Apr 24 2019, 06:21 PM
QUOTE
И ещё, данный эмулятор не на асме частично?  Если часть на асме и нет того же кода на С, то можно забить.

ну да.. асма там более чем навалом... особенно в StarScream движке 86000 процессора...
удивила производительность на скинутом по FSB и множителям до 580мгц атом N430 х86

Автор: Gospodin_Riba Apr 26 2019, 03:31 PM
Итак, после успеха с SEGA MegaDrive, я принялся портировать эмулятор SNES.
Взял за основу SNES9x и стал его пилить... biggrin.gif

Успешно портировал, вывод графики на дисплей снова повешал на встроенный со-процессор (PRUSS), так как он занимает довольно много времени.

А также, в эмуляторе применил полезное свойство DSP C6745 - это unaligned word access! тоже повысило быстродействие - теперь память ROM'а парсится не байтами, а словами (двойными/четверными). И пофиг, что адрес может быть не выровнен (такое может быть в эмуляторе запросто!). По этой причине, ARM'ы опять в пролёте, так как они не работают с невыровненными указателями и валятся сразу в экспешн smile.gif) spiteful.gif

Вот для примера (без поддержки невыровненных адресов - только побайтово и через сдвиги):
CODE

#define READ_WORD(s) ( *(uint8 *) (s) |\
       (*((uint8 *) (s) + 1) << 8))

#define READ_DWORD(s) ( *(uint8 *) (s) |\
        (*((uint8 *) (s) + 1) << 8) |\
        (*((uint8 *) (s) + 2) << 16) |\
        (*((uint8 *) (s) + 3) << 24))

#define WRITE_WORD(s, d) *(uint8 *) (s) = (d), \
                        *((uint8 *) (s) + 1) = (d) >> 8

#define WRITE_DWORD(s, d) *(uint8 *) (s) = (uint8) (d), \
                         *((uint8 *) (s) + 1) = (uint8) ((d) >> 8),\
                         *((uint8 *) (s) + 2) = (uint8) ((d) >> 16),\
                          *((uint8 *) (s) + 3) = (uint8) ((d) >> 24)


А вот с unaligned:
QUOTE

#define READ_WORD(s) (_mem2 (s))

#define READ_DWORD(s) (_mem4(s))

#define WRITE_WORD(s, d) (_mem2 (s)) = (d)

#define WRITE_DWORD(s, d) (_mem4(s)) = (d)


Очевидно, что второй вариант (поддерживаемый C6745 и x86) - выполняется быстрее shades.gif

Автор: Gospodin_Riba Apr 26 2019, 03:33 PM
Попутно улыбнуло, что Dingoo A320 лажает на SNES-играх. biggrin.gif

Смотрим видео и замечаем рывки при движении картинки: https://www.youtube.com/watch?v=DC12yG3EArU





Автор: Gospodin_Riba Apr 26 2019, 03:35 PM
Вот мой вариант SNES эмулятора для C6745, выоптимизированного довольно долгое время (ещё не предел, подозреваю):

https://www.youtube.com/watch?v=EpVDKmqD0zw







Автор: Gospodin_Riba Apr 26 2019, 03:36 PM
В общем получилось вполне играбельно. SNES также как и SEGA MegaDrive требует кучу ресурсов. Если у СЕГи - это процессоры, то у SNES - навороченная графика.
smile.gif

Автор: Gospodin_Riba Apr 26 2019, 03:37 PM
"Донкей-конг кантри" - эта игра - визитная карточка SNES 1000000Z.gif

Автор: Gospodin_Riba Apr 26 2019, 03:39 PM
SNES-эмулятор и не только - для всяких DIY консолей:
https://github.com/Rakashazi/emu-ex-plus-alpha/tree/master/Snes9x

Следующим эмулятором - будет NEO-GEO MVS (аркадный автомат) 1_7.gif

Автор: Gospodin_Riba Apr 26 2019, 03:41 PM
QUOTE (microxa @ Apr 24 2019, 06:21 PM)
ну да.. асма там более чем навалом... особенно в StarScream движке 86000 процессора...
удивила производительность на скинутом по FSB и множителям до 580мгц атом N430 х86

ну так ASM же)))

который к сожалению не перетащишь на другие платформы. Если портирование - то тут только "C" рулит. Не зря, K&R называли этот язык "переносным ассемблером" biggrin.gif

А вот Unity всякие с C# в пролёте... 1_3.gif С ПК никуда больше не перетаскивается код

Автор: Gospodin_Riba Apr 28 2019, 01:48 PM
Портировал эмулятор аркадного автомата NEO GEO, как обещал. smile.gif

Идёт просто превосходно! biggrin.gif

Видео: https://www.youtube.com/watch?v=mdpIz6Zkh78






Автор: Gospodin_Riba Apr 28 2019, 01:49 PM
Железо МегаДрайва и НеоГео настолько схожи, что можно сказать, что NEO-GEO - это улучшенная SEGA Genesos smile.gif


Автор: Gospodin_Riba Apr 28 2019, 01:52 PM
В SEGA Genesis:
процессоры : M68K + Z80
звук: YM2612 + PSG
видео: VDP от TMS

В NEO-GEO:
процессоры: M68K +Z80
звук: YM2610 + AY8910 (2610 превосходит по качеству 2612)
видео: более навороченный VDP от TMS


Автор: Gospodin_Riba Apr 28 2019, 01:56 PM
При портировании эмулятора учтены особенности C6745:

- unaligned word access для парсинга РОМ-сетов
- отрисовка встроенным со-процессором PRUSS, работающем на частоте в2 раза ниже C6745-го
- деление заменено умножением (для вещественных чисел)
- конвеер кода (параллельное исполнение нескольких ассемблерных инструкций)

Частоты те же: C6745 456 MГц, PRUSS 228 МГц, LCD 101 МГц, SD карта : 22 МГц.
Звук: 16 бит , 46 кГц

Итоговый фреймрейт - постоянный - 61 FPS.

Следующий эмулятор на выдачу - Capcom Play System 1,2

Видео макета игровой консоли "Black Prism": https://www.youtube.com/watch?v=sR3LJz1eBX4






Автор: Gospodin_Riba Apr 29 2019, 04:49 PM
Ради спортивного интереса переписал на ассемблере код отрисовки для PRUSS.
И задействовал unaligned word access для эмулятора SEGA MEGA DRIVE.

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

https://www.youtube.com/watch?v=c7B8XvB4c7c






Теперь бесспорно - блекфин и STM32H7 сосут ))) у них нет шансов biggrin.gif

Автор: Gospodin_Riba May 3 2019, 01:04 PM
Форум медленно подыхает...

Перенес эмулятор Capcom Play System 1 и 2.
За основу брал caname. Задолбался его вычищать.
Учитывая большую любовь MAME к точности эмуляции, большой скорости ждать не пришлось.

Эмулятор ворочает на C6745 на 35..40 FPS, вместо целевых 60.
Но это лучше, чем ничего.

Размер экрана в CPS1,2 384x224 пикселей (логически до 512x256 - скролл).

Игры специфические.

Видео-профит: https://www.youtube.com/watch?v=D_TOI35BflI





Автор: Gospodin_Riba May 3 2019, 01:05 PM
Игра для детей: https://www.youtube.com/watch?v=LBIxXzb1SN4

ПОКО-Нянь )))

Как тестовый РОМ очень даже ничего - на нём отлаживался)))





Автор: microxa May 5 2019, 02:27 AM
QUOTE
Результаты поразительны: - быстродействие увеличилось (синхронизация кадров убрана, чтобы оценить максимальную производительность):

все это конечно хорошо еслиб не было немного грусно: а именно.. вот например занимаюсь эмулятором бк0010 с 2 двумя способами - 1ый фреймовый. с синхронизацией по звуку. всем хорош.. но есть и второй... бесфреймовый метод. синхра по тактам процессора. и все не очень.. особенно на х86-том.. у которого все плохо с таймерами реального времени (команды RDTSC токо относительно хорошие)..
...
а вот ARM-овая малинка могла же ведь через контролер DMA в пин радио передовать аж под 100мгц..

Автор: microxa May 5 2019, 02:29 AM
QUOTE
Результаты поразительны: - быстродействие увеличилось (синхронизация кадров убрана, чтобы оценить максимальную производительность):

все это конечно хорошо еслиб не было немного грусно: а именно.. вот например занимаюсь эмулятором бк0010 с 2 двумя способами - 1ый фреймовый. с синхронизацией по звуку. всем хорош.. но есть и второй... бесфреймовый метод. синхра по тактам процессора. и все не очень.. особенно на х86-том.. у которого все плохо с таймерами реального времени (команды RDTSC токо относительно хорошие)..
...
а вот ARM-овая малинка могла же ведь через контролер DMA в пин радио передовать аж под 100мгц..

Автор: microxa May 5 2019, 02:30 AM
QUOTE
Результаты поразительны: - быстродействие увеличилось (синхронизация кадров убрана, чтобы оценить максимальную производительность):

все это конечно хорошо еслиб не было немного грусно: а именно.. вот например занимаюсь эмулятором бк0010 с 2 двумя способами - 1ый фреймовый. с синхронизацией по звуку. всем хорош.. но есть и второй... бесфреймовый метод. синхра по тактам процессора. и все не очень.. особенно на х86-том.. у которого все плохо с таймерами реального времени (команды RDTSC токо относительно хорошие)..
...
а вот ARM-овая малинка могла же ведь через контролер DMA в пин радио передовать аж под 100мгц..

Автор: Gospodin_Riba May 5 2019, 09:29 AM
QUOTE
а вот ARM-овая малинка могла же ведь через контролер DMA в пин радио передовать аж под 100мгц..


Эти ваши малинки в пролёте. smile.gif PRUSS в DSP позволяют на 228 МГц шевелить пинами. Потому что PRUSS - programmable realtime unit sub-system smile.gif

QUOTE
все это конечно хорошо еслиб не было немного грусно: а именно.. вот например занимаюсь эмулятором бк0010 с 2 двумя способами - 1ый фреймовый. с синхронизацией по звуку. всем хорош.. но есть и второй... бесфреймовый метод. синхра по тактам процессора. и все не очень.. особенно на х86-том.. у которого все  плохо с таймерами реального времени (команды RDTSC токо относительно хорошие)..


Зачем мудрить? В эмуляторах проще делать синхронизацию кадров по прерыванию заполнения аудио-буфера.

Расчет идет от задания требуемого FPS: допустим 60. Значит, зная разрядность семпла , частоту дискретизации и число каналов - можно получить длину буфера в байтах:

48000*2*1/60 = 1600 байт - это однаполовинка аудио-буфера. 48 кГц, 16 бит, 1 канал.
прерывание по заполнению будет происходить ровно 60 раз за 1 секунду.

И всё замечательно! smile.gif Вызов эмулятора звуковой системы(апдейт звуковой волны эмулируемых чипов ) - желательно тоже разместить в обработчик прерывания (чтобы при снижении FPS на тяжелых местах -темп звука снижался, но хрипеть зато не будет )))

Что касается RDTSC - в DSP, ARM-ахи блекфинах - тоже есть счетчик тактов ядра (или счетчик тактов системной шины). smile.gif

Автор: Gospodin_Riba May 11 2019, 10:40 AM
Перенёс эмулятор GameBoy Advance.

Оптимизировал насколько смог:
1) таблицы переходов для ARM и Thumb вместо огроменных switch-case'ов на 4096 значений
2) переделал рендерер
3) отрисовка с помощью PRUSS построчно

С 15 FPS поднял до 25 - 30 FPS. Но этого мало. Надо 60 FPS.
Звук отключен, так как он лагает - проигрывается дважды.
В GBA неудачная архитектура звуковой системы - задержки зависят от CPU и таймеров. Поэтому на распев тянуть ноты не вышло.

Видео: https://www.youtube.com/watch?v=lymA8NMXQ5I





Автор: Gospodin_Riba May 11 2019, 10:44 AM
Есть идея растянуть темп звука, сохранив тон. Но задача эта нетривиальная. Все звуковые стретчеры, которые я пробовал - дают либо эхо, либо дрожание.

Можно конечно разогнать DSP, но это будет нечестно. Да и толку не даст - нужен разгон в 2 раза как минимум.

Либо поискать другой эмулятор GBA. Но это не самоцель. Играть можно.

Ещё немного игр: https://www.youtube.com/watch?v=sE0QRKIF_bo

На смещение кадра вниз (перекрут) -не обращать внимания, я забыл добавить синхронизацию по отрисовке строки.





Автор: Gospodin_Riba May 15 2019, 10:56 AM
Добавил всё-же звук к эмулятору GBA. Использовал алгоритм растяжки темпа с сохранением тона.

Задача нетривиальная и требует академического кубатуренья. Хорошо, что уже давно всё проработано. ))

За основу взял эту программу (с открытыми исходниками): http://www.surina.net/soundtouch

Она позволяет много чего делать со звуком: изменять темп с сохранением тона, подымать тон с сохранением темпа, ресемплинг, вычисления BPM. Куча фильтров-интерполяторов: Шеннона, Кубический, Линейный. Антиалиасинговый фильтр.

Темп звука в эмуляторе растягивается в 2...3 раза (30 - 20 FPS), при этом тональность остаётся той же.

Видео: https://www.youtube.com/watch?v=ulLPALpHOGk







Автор: Gospodin_Riba May 18 2019, 06:43 AM
Портировал Open Tyrian 4.gif

Это - классический 2D Space Shooter. Одна из немногих хороших игр для DOS.

Есть версия для ПК под Win: https://www.majorgeeks.com/files/details/opentyrian.html

OpenTyrian на макете игровой консоли BlackPrism (TMS320C6745 DSP). Особо каких-либо проблем, связанных с производительностью - не было. Так как всё-же это нативное приложение, а не эмуляция:

https://www.youtube.com/watch?v=1VbsENAWiOE





Автор: Gospodin_Riba May 18 2019, 06:45 AM
Экран - классический видеорежим "13h": 320x200 256 цветов (палитровый)

Звук - 46 кгц, 16 бит, 8 каналов

Музыка - эмулятор OPL3 FM YM3812 (Adlib), lds-плеер.

Автор: Gospodin_Riba May 18 2019, 06:48 AM
Поддерживается основной функционал игры и часть дополнительного:

- плеинг
- сохранение игры (уровни, оружия)
- просмотр видеороликов (между уровнями)
- jukebox для проигрываниямузыки отдельно

сетевая игра и клавиатура - выпилены по понятным причинам )))

Игра требует работу с файлами (FatFs)

Автор: Gospodin_Riba May 18 2019, 12:01 PM
OpenTyrian под ведроид - https://www.youtube.com/watch?v=G-D8KKg0tpo

Как говорится, сосач очевиден: идёт медленно и выпилена музыка.

Ещё одним примером больше - как всякие вёдра, ардуины-пердуины снижают производительность железа biggrin.gif

Автор: Gospodin_Riba May 21 2019, 08:14 AM
Tyrian под Dingoo A320: https://www.youtube.com/watch?v=Ij5oHuere64

По-лучше, чем у ведроида, но всёравно сосач ))) Полупрозрачность у облаков отключена и звук местами хрипит, так как не хватило ума сделать обработку звука правильно ))

Особо люто лагает с 2:12 во время демонстрации опций игры в качественном режиме: https://www.youtube.com/watch?v=Ij5oHuere64&t=132

Вот вам Dingoo и Линукс ))

P.S. и видео между уровнями выпилены (глядел исходники порта Dingoo ). Выпилены - потому что там CPU кидает эксепшн из-за обращения к невыровненным данным памяти во время парсинга видео )) в своих железках я это пофиксил)

Автор: Gospodin_Riba May 21 2019, 08:17 AM
Портировал "Крокодил". smile.gif

Что это такое читать тут: https://vrtp.ru/index.php?showtopic=30174&view=findpost&p=791921

Видео: https://www.youtube.com/watch?v=uyxqLgsA9yE

Даже никакого DMA с PRUSS не понадобились, всё успевает делать процессор.

А вот на STM32H743 отрисовка через DMA, иначе подтормаживает ))

Ещё один аргумент в пользу C6745 DSP biggrin.gif





Автор: Gospodin_Riba Jun 5 2019, 06:31 AM
Предложение в силе. Есть печатные платы - 400p за 1 шт. пишем в личку.

Монтажная схема, актуальная принципиальная схема, перечень элементов - по запросу.

Помогу с приобретением DSP TMS320C6745 и другими комплектующими! Пишите в личку.

Автор: Aries Jun 24 2019, 11:45 AM
Хороший может получиться инструмент для лаборатории,
начиная от банальных программаторов (любых !) чипов,
заканчивая исследованиями в области glitch атак.
Не планируется работа в этом направлении ?

Автор: Gospodin_Riba Jul 1 2019, 10:14 AM
QUOTE (Aries @ Jun 24 2019, 11:45 AM)
Хороший может получиться инструмент для лаборатории,
начиная от банальных программаторов (любых !) чипов,
заканчивая исследованиями в области glitch атак.
Не планируется работа в этом направлении ?

Вся работа уже проделана - сделана печатная плата для отладки. В каком русле её использовать - решает каждый. Мне интересны игры на этом DSP. Для средств связи - это дорогое по потреблению тока решение, проще взять аппаратные кодеки , жрать будут мало и проще.

Автор: Gospodin_Riba Jul 1 2019, 10:15 AM
Пришли несколько DSP и память на 64 МБ. Есть также память на 32 МБ. Обвест тоже есть - стабилизаторы, кварцы. Отдаю вместе с платами. Пишите в личку.

Автор: Gospodin_Riba Jul 1 2019, 10:16 AM
64 MB SDRAM (4M x 16 bit), 6 ns

Автор: Gospodin_Riba Jul 1 2019, 10:17 AM
Платы

Автор: Gospodin_Riba Jul 20 2019, 02:04 PM
Никто не забыт, ничто не забыто! smile.gif

Коллектив разработчиков в лице меня и ещё нескольких человек
написали игру "Gradius III Total Terror"

Подробнее об игре здесь:
https://www.old-games.ru/forum/threads/gradius-iii-total-terror-igra-v-stile-8-16-bitnyx-igrovyx-pristavok.86169/

1_7.gif spiteful.gif biggrin.gif

Сайт игры: http://gradius3.space

Скачать игру:

http://gradius3.space/download5.php (Windows, билд 24.06.2019)

http://gradius3.space/download6.php (Linux, билд 30.06.2019)

http://gradius3.space/download7.php (DOS, билд 14.07.2019)

leb.gif support.gif 1000000Z.gif

http://youtu.be/iyaDhdNtZTo

http://youtu.be/PCq9AKQk58Q

http://youtu.be/as6IXMbg2GI

http://youtu.be/S2NLGGZgkvE

image

image

image

Автор: Gospodin_Riba Jul 20 2019, 02:07 PM
Игра Gradius III Total Terror в действии на игровой консоли Black Prism:


Автор: Gospodin_Riba Jul 20 2019, 02:09 PM
Видео игры с полным прохождением:

Gradius III @ BlackPrism:
https://www.youtube.com/watch?v=v1qIOm6hs4Q

smile.gif






4.gif

Автор: Gospodin_Riba Jul 20 2019, 02:16 PM
Linux также не забыт! biggrin.gif

image

Автор: intel Nov 7 2021, 08:13 AM
не вижу линукс !!! а вот фокусы с экраном шарп зачетные !!! мое почтение, о черный господин а реально акой экран подключить к той же малинке на gpio а то штатный экран редкий шлак !!!