Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

АРМ7 въпроси
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=1245
Страница 1 от 3

Автор:  Nikola Kirov [ Пет Ное 11, 2005 1:37 am ]
Заглавие:  АРМ7 въпроси

Някои може ли да разясни малко MEMORY ACCELERATOR MODULE. Кво е това нещо как се пие и кво му е мезето :)

Автор:  Zdrav [ Пет Ное 11, 2005 10:55 am ]
Заглавие: 

Memory Accelerator Module(MAM) ускорява изпълнението на програмата, когато тя се изпълнява от по-бавния FLASH. Говоря за LPC2000 серията, където го има и PHILIPS навсякъде подчертават, че имат zero wait states при изпълнение на програмата от FLASH. Както и по-голяма определеност в поведението на процесора в сравнение с използването на кеш. В UserManual-a на всеки процесор от серията има обяснени принципите на работа, най-добре да пиеш от извора.
На демонстрациите PHILIPS най-често показват как една програмка за мигащ светодиод се забавя когато я прехвърлиш от RAM-а във FLASH-a и после как скоростта се възстановява когато включиш MAM в действие. Когато обаче опре до по-сложни програми тогава истината излиза на бял свят. Та значи този МАМ губи ефективността си ако имаш начесто branch инструкции. За това обаче може да се използват условно изпълнявани команди в критичните на скорост места.
Например вместо:

Код:
cmp r0, r1
bne Jump1
ldr r2, [r3]
Jump1:
...


става:

Код:
cmp r0, r1
ldreq r2, [r3]


И пак ускорението не е гарантирано. Но пък и без MAM скоростта чувствително пада.
МАМ също така може да намали консумацията тъй като съкращава броят обръщaния към FLASH-a.

Не знам има ли го при другите MCU с ARM7 ядро, това което говоря е за LPC2000 серията.

Автор:  Zdrav [ Пет Ное 11, 2005 11:02 am ]
Заглавие: 

Zdrav написа:
Например вместо:

Код:
cmp r0, r1
bne Jump1
ldr r2, [r3]
Jump1:
...


става:

Код:
cmp r0, r1
ldreq r2, [r3]



Такива инструкции(от сорта ldreq) има само в ARM режим в Thumb няма условно изпълнявани инструкции.

Автор:  Nikola Kirov [ Пет Ное 11, 2005 1:52 pm ]
Заглавие: 

Мерси. Просветна ми. 2 пъти го четох в оригиналната документация но не можа да ми се изясни точно.

Автор:  Цецо [ Пет Ное 11, 2005 6:01 pm ]
Заглавие: 

Има го само при Филипс за сега. Може би защото флаша им хич не е от бързите.

Има ефект от него особенно при линеен код. Когато имаш много подскоци и разклонения - ефекта е нулев.

Иначе е нещо като кеш или конвейр или по скоро комбинация от двете.

Автор:  CM600 [ Пет Ное 11, 2005 8:08 pm ]
Заглавие: 

Според PHILIPS по късите преходи не трябва да са проблем защото MAM модула има Branch Trail Buffer-и от по 128 бита, които пазят последните изпълнени инструкции. Така, че ако се изпълнява някой цикъл, който не подскача много надалеч, би трябвало да има положителен ефект :P
Някои LPC-та (май че 22xx) имаха регистри с които да се следи състоянието на MAM, ама не съм много сигурен. С ADuC съм работил повече, там няма MAM.

Автор:  the_real_maniac [ Пет Ное 11, 2005 8:24 pm ]
Заглавие: 

offtopic:

Край ! Вече твърдо реших колкото се може по-скоро почвам да се занимавам с ARM7 (е естествено и да не забравяме CPLD-тата ) 8)

т.е накефЪх са :)

Автор:  Dimitar [ Пет Ное 11, 2005 8:50 pm ]
Заглавие: 

И от какво се накефи толкова ако мога да попитам :) .

Автор:  Nikola Kirov [ Пет Ное 11, 2005 9:03 pm ]
Заглавие: 

Ух. Пак закъсах. Този път с VIC.
От 2 часа чета и се пуля пред документацията , оригиналната от ARM и не мога да зацепя кое от къде ми идва.
Не мога да схвана къде са ми флаговете на отделните прекъсвания. Не мога да схвана и как се конфигурира кои източник на прекъсване да е FIQ.
Векторните ги рабрах уж. А тия дето са Non-vectored IRQ и за тях не ми стана ясно нещо. Някои може ли да хвърли малко светлина по въпроса. Нещо хич не ми спори с тия армове :(

Автор:  ДедоБоре [ Пет Ное 11, 2005 9:05 pm ]
Заглавие: 

това нещо като "хипер-кеш" ли е?
щото дори нормален кеш тярбва да решава тези проблеми.
или кеша не върви на 1 такт или какво? ако беше свързано с thumb режима и има значение за конвейра (след 'unthumb-ване на унструкцията) го разбирам, ама то важало само за 32-битова мода.

здрав, айде, бил си на презентацията. с какво точно се биха в гърдите?

поправка:
сега се зачетох в документацията на 2106. той нямал кеш изобщо! 8O
бях свикнал априори ARM7 коровете да имат поне 8К конфугурируем кеш, ама този май е уникат.

май отговора на въпроса какво е МАМ е "кеш за инструкции с големина 8 инструкции"
8 защото имаме 2х128 бита / 32 бита за инструкция

поправете ме ако съм разбрал криво нещо документацията

Автор:  the_real_maniac [ Пет Ное 11, 2005 10:32 pm ]
Заглавие: 

Dimitar написа:
И от какво се накефи толкова ако мога да попитам :) .


Еми като включим другите неща , които чух за ARM7/9 (стабилност, възможности) + това горе + скоростта , която могат да достигнат (такт => цикъл на инструкция и прочие) как да не им се накефи вече човек :)

Пък и точно ти да питаш такова нещо човек, който търси да мине на друго от PIC след време :P :P :P
--
въпроса го обмислям от известно време (да се чете от както прочетох отзивите/споделения опит за PIC на хората от този форум), но спирам до тук, че темата на Nikola е за друго.
има си теми за моя въпрос / моето чудене ;)

Автор:  ToHu [ Пет Ное 11, 2005 11:04 pm ]
Заглавие: 

Абе в определени отношения си е супер АРМ, но да измести нещо от сорта на pIC не го виждам, ще си играя с него определено, но за момента си поръчах равойна среда на Cygnal тъкмо имам приложение като за него, това ARM-а не може да конкурира, има си приложения където 32 битовите сметки не са много но скоростта е от значение, а това са си 100 MIPS, и тях от давна им се каня, ей ся ще ги видя. Иначе пък се сещам за едно приложение дето арм-а просто е бе конкуренция, и за още едно дето на амд алхимика му е конкуренция ... за сега .....

Автор:  Zdrav [ Пет Ное 11, 2005 11:08 pm ]
Заглавие: 

Спокойно VIC изглежда малко объркващо в началото може би заради многото регистри. Избираш кой да бъде FIQ като използваш VICIntSelect регистъра. В UserManual-а в раздела за VIC има една таблица "Interrupt sources" В тази таблица всички източници на прекъсване имат номер. За да конфигурираш дадено прекъсване като FIQ трябва да сетнеш съответния номер бит във VICIntSelect. Например Timer0 е номер 4. За да имаш FIQ от Timer0 пишеш:

Код:
VICIntSelect |= 0x10;


Остава ти само да го активираш с:
Код:
VICIntEnable = 0x10;


Във таблицата на изключителните събития във startup файла на адрес 0x1C трябва да имаш вектор към FIQ процедурата ти и си готов.
Щом си разбрал за векторните за невекторните е още по-лесно. Просто сетваш бита му във VICIntEnable. Когато постъпи заявка за такова прекъсване ARM7 ще прочете какъв адрес има записан във VICDefVectAddr и изпълнението ще бъде насочено към този адрес превключвайки ядрото в IRQ режим.
Мисля че първият път когато конфигурираш VIC с някакъв реален пример ще ти стане ясно.

Автор:  Nikola Kirov [ Пет Ное 11, 2005 11:21 pm ]
Заглавие: 

Като че ли ми просветна. А флагове на различните прекъсвания имам ли?

Автор:  Zdrav [ Пет Ное 11, 2005 11:30 pm ]
Заглавие: 

ДедоБоре MAM замества кеша при LPC2000. На презентацията не казаха нещо различно от писаното в документацията.
Цитат:
ама то важало само за 32-битова мода.

Да не съм те подвел. Примера който дадох беше че при Thumb инструкциите не можеш да имаш условно изпълнение. Тоест ldreq е само за ARM режим, за Thumb имаш само ldr.
MAM работи независимо от режима ARM/Thumb.
Обсъжданията почват да приличат на моменти на ARM срещу останалия свят :lol:

Страница 1 от 3 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/