реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Первые шаги RM9200 (SAM-ICE => SDRAM)
SSSK
сообщение Jan 18 2007, 12:00
Сообщение #1





Группа: Новичок
Сообщений: 7
Регистрация: 27-12-06
Пользователь №: 23 944



Товарисчи !!!
Поделитесь плиз тестовым проектом (минимальное наполнение, главное чтобы работало) для 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 показывает "чудеса" производительности. Вот сижу и думаю с какого края начинать работать напильником. Заранее благодарю за любую помощь.
Go to the top of the page
 
+Quote Post
d__
сообщение Jan 18 2007, 12:34
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 197
Регистрация: 26-08-04
Пользователь №: 548



В 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;
.......

Пока не проинициализируешь все клоки и контроллер СДРАМ загружать в СДРАМ что либо бесполезно, поэтому необходимо при подаче питания чтобы в ходе инициализационного процесса из какой-либо ПЗУхи выполнился кусок кода инициализирующий необходимую периферию и контроллер СДРАМ и больше к ним не прикасаться...
Надеюсь что был вам полезен...
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 13:45
Рейтинг@Mail.ru


Страница сгенерированна за 0.01352 секунд с 7
ELECTRONIX ©2004-2016