Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Первые шаги RM9200 (SAM-ICE => SDRAM)
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
SSSK
Товарисчи !!!
Поделитесь плиз тестовым проектом (минимальное наполнение, главное чтобы работало) для IAR который заливается в SDRAM через J-link и нормально запускается (т.е. нужны файлы .xcl, .mac, cstartup.s79). Или, если возможно, ответте на такие вопросы:
1. Насколько опасно переинициализировать SDRAM после прошивки туда программы (насколько я понимаю без кэш-а все должно насмерть повиснуть)?
2. Как наиболее эффективно в стартапном коде перенести таблицу векторов прерываний в 0-вой адрес
(с 0x2000 0000 в 0x0000000 дабы корректно отрабатывались прерывания) здесь желательно посмотреть кусок асмовского кода.
3. Можно ли линкером собрать программу, чтобы прошивка шла в разные области памяти (SRAM, SDRAM). Т.е. в начале xcl пишем :
-DMEMSTART=0x0000
-DMEMEND=0x03fff
-Z(CODE)INTVEC=MEMSTART:+40
Затем:
-DMEMSTART=0x2000 0000
-DMEMEND=0x2010 0000
Или сразу объявить ему промежуток от 0 до 0x2010 0000 ....?
Мои попытки не увенчались успехом...

4. Нужно ли еще раз инициализировать PMC (на предмет PCK, Master Clock) если это было сделано в скрипте J-link-a (.mac -файле)

5. На какой частоте будет работать SDRAM? Если MCK, то это как то маловато ... Как можно увеличить производительность системы в этом случае? (перекачивать куски кода в SRAM?)

Вопросы возникли в следствии попытки залить проект BasicMmu от EК модуля в SDRAM платы Аргуссофта AS-9200. Это дело туда залилось, но вот Dhrystone показывает "чудеса" производительности. Вот сижу и думаю с какого края начинать работать напильником. Заранее благодарю за любую помощь.
d__
В cstartup вектора переделываются на такой манер:
....
__program_start
ldr pc, [pc, #0x18] ; SoftReset
ldr pc, [pc, #0x18] ; UndefHandler
ldr pc, [pc, #0x18] ; SWIHandler
ldr pc, [pc, #0x18] ; PrefetchAbortHandler
ldr pc, [pc, #0x18] ; DataAbortHandler
dc32 (SFE(CHECKSUM)-__program_start)/512+1
ldr pc, [pc,#-0xF20] ; IRQ : read the AIC
ldr pc, [pc,#-0xF20] ; FIQ : read the AIC
;- There are only 5 offsets as the vectoring is used.
PUBLIC SoftVectorVals
SoftVectorVals:
DCD SoftReset ;idx=0
DCD UndefHandler ;idx=1
DCD SWIHandler ;idx=2
DCD PrefetchAbortHandler
DCD DataAbortHandler
....
SoftReset
b ?boot
......
?boot:
.....
// after remap
ldr r11,=0
ldr r12,=__program_start
ldmia r12!,{r0-r10} //move vectors from my INTVEC
stmia r11!,{r0-r10} //to internal RAM @ 0
ldmia r12!,{r0-r6}
stmia r11!,{r0-r6}
....
Поскольку данные участки программы позиционно независимы они могут использоваться в любом месте памяти...
Табличка SoftVectorVals доступна с уровня языка Ц и в low_level_init можно их первоначально устанавливать:
.....
extern void *SoftVectorVals[];

__irq __arm void MyUndefHandler(void)
{
.....
}



......
SoftVectorVals[1]=(void *)MyUndefHandler;
.......

Пока не проинициализируешь все клоки и контроллер СДРАМ загружать в СДРАМ что либо бесполезно, поэтому необходимо при подаче питания чтобы в ходе инициализационного процесса из какой-либо ПЗУхи выполнился кусок кода инициализирующий необходимую периферию и контроллер СДРАМ и больше к ним не прикасаться...
Надеюсь что был вам полезен...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.