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

 
 
> SK-MLPC2468 + external SRAM, требуется совет знающих
viael
сообщение Apr 3 2008, 20:24
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 200
Регистрация: 10-04-06
Из: Украина,Запорожье
Пользователь №: 15 979



Люди ПАМАГИТЕ не могу больше на грабли наступать.

Есть связка SK-MLPC24787 от starterkit.ru + SkyLink + uVision3 3.53(компилер RealVew 3.1.0.93).
Хочу использовать внешнюю срам для размещения отдельных функций в ней.
шаг первый:
после стартапа Си-шной фунцией инициализирую EMC. Последовательно заполняю все ячейки внешней срам, потом считываю, сравниваю все ОК.
шаг второй:
переношу функцию инициализации в стартап. Повторяю процедуру все ОК полет нормальный.
шаг третий:
указываю линкеру разместить какую либо функцию во внешней памяти. После этого
начинаю выпадать DAbort на этапе __scatterload_copy

Код
                 __scatterload_copy:
0x00000250  E2522010  SUBS      R2,R2,#0x00000010
0x00000254  28B00078  LDMCSIA   R0!,{R3-R6}
0x00000258  28A10078  STMCSIA   R1!,{R3-R6}   <-падает в аборт здесь
0x0000025C  8AFFFFFB  BHI       __scatterload_copy(0x00000250)
0x00000260  E1B02E82  MOVS      R2,R2,LSL #29
0x00000264  28B00030  LDMCSIA   R0!,{R4-R5}
0x00000268  28A10030  STMCSIA   R1!,{R4-R5}
0x0000026C  45904000  LDRMI     R4,[R0]
0x00000270  45814000  STRMI     R4,[R1]
0x00000274  E1A0F00E  MOV       PC,R14


для того чтобы убедиться что с EMC все ок до входа в __main делаю пробную запись в срам,

Код
PCONP_OFS                EQU     0x0C4     ; SCB Base Address
PINSEL_BASE_ADDR        EQU        0xE002C000
PINSEL6_OFS                EQU        0x18
PINSEL8_OFS                EQU        0x20
PINSEL9_OFS                EQU        0x24
EMC_BASE_ADDR            EQU        0xFFE08000
EMC_STA_CFG0_OFS        EQU        0x200
EMC_STA_WAITWEN0_OFS    EQU        0x204
EMC_STA_WAITOEN0_OFS    EQU        0x208
EMC_STA_WAITRD0_OFS        EQU        0x20C
EMC_STA_WAITPAGE0_OFS    EQU        0x210
EMC_STA_WAITWR0_OFS        EQU        0x214
EMC_STA_WAITTURN0_OFS    EQU        0x218



                MOV     R1, #1
                LDR     R0, =EMC_BASE_ADDR
                STR     R1,[R0]
            ;PCONP  |= 0x00000800;  /* Turn On EMC PCLK */
                LDR     R0, =SCB_BASE
                LDR     R1,[R0,#PCONP_OFS]
                ORR     R1,R1,#0x00000800;/* Turn On EMC PCLK */
                STR     R1,[R0,#PCONP_OFS]
            ;PINSEL6 = 0x00005555;
                LDR     R1, =0x00005555
                LDR     R0, =PINSEL_BASE_ADDR
                STR     R1,[R0,#PINSEL6_OFS]
            ;PINSEL8 = 0x55555555;
                LDR     R1, =0x55555555
                STR     R1,[R0,#PINSEL8_OFS]
            ;PINSEL9 = 0x50555555;
                LDR     R1, =0x50555555
                STR     R1,[R0,#PINSEL9_OFS]
            ;EMC_STA_CFG0 = 1<<19;
                LDR     R1, =0x00080000
                LDR     R0, =EMC_BASE_ADDR
                STR     R1,[R0,#EMC_STA_CFG0_OFS]
            ;EMC_STA_WAITWEN0 = 0;
                LDR     R1, =0
                STR     R1,[R0,#EMC_STA_WAITWEN0_OFS]
            ;EMC_STA_WAITOEN0  = 0x0;
                LDR     R1, =0
                STR     R1,[R0,#EMC_STA_WAITOEN0_OFS]
            ;EMC_STA_WAITRD0   = 0x1;
                LDR     R1, =1
                STR     R1,[R0,#EMC_STA_WAITRD0_OFS]
            ;EMC_STA_WAITPAGE0 = 0x0;
                LDR     R1, =0
                STR     R1,[R0,#EMC_STA_WAITPAGE0_OFS]
            ;EMC_STA_WAITWR0   = 0x0;
                LDR     R1, =0
                STR     R1,[R0,#EMC_STA_WAITWR0_OFS]
            ;EMC_STA_WAITTURN0 = 0x0;
                LDR     R1, =0
                STR     R1,[R0,#EMC_STA_WAITTURN0_OFS]

            ;external ram write test
                LDR     R1, =3
                LDR     R0, =0x80000000
                STR     R1,[R0]
                STMIA   R0!,{R3-R6}


все работает,
но как только начинается копирование в __scatterload_copy падает в аборт.

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

Код
                MOV     R1, #1
                LDR     R0, =EMC_BASE_ADDR
                STR     R1,[R0]
            ;PCONP  |= 0x00000800;  /* Turn On EMC PCLK */
                LDR     R0, =SCB_BASE
                LDR     R1,[R0,#PCONP_OFS]
                ORR     R1,R1,#0x00000800;/* Turn On EMC PCLK */
                STR     R1,[R0,#PCONP_OFS]


хотя в "железе" этот участок кода работал без проблем. Уже не знаю кому доверять симулятору или "железу",
может и сам подглюкиваю wacko.gif

Есть укого каки идеи?
Проект прилагаю.

P.S.Если делаю по аналогии только для внутренней срам (что для эзернет, что для усб срам) то все работает.
Прикрепленные файлы
Прикрепленный файл  SRAM_test2.rar ( 30.06 килобайт ) Кол-во скачиваний: 44
 
Go to the top of the page
 
+Quote Post



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

 


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


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