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

 
 
 
Reply to this topicStart new topic
> ARM926E-S, TCM, remap
toweroff
сообщение Jun 3 2013, 14:25
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Добрый день!
Что-то я совсем запутался.
Объясните, пожалуйста, "на пальцах" - как это все происходит.
Смаппировать область не проблема, есть специально выделенный регистр. Но как тогда быть с TCM и векторами прерываний?
Я пытаюсь включить TCM, переношу вектора в RAM, маппирую RAM в регион 0... и улетаю черт-те знает куда
Можно, конечно, мапировать RAM за пределами области TCM, но как быть с векторами?
Получается, что из-за конфликта ремапа и TCM памяти у меня все крашится (?)

UPD
Читать, читать и читать...
Магическое слово - бит V в Control Register of System Control Coprocessor

Продолжаем упражнения sad.gif

Из описания CP15 c1 Control Register
Цитата
Exception vector location bit:
1 = vector address range is 0xFFFF0000 to 0xFFFF001C
0 = vector address range is 0x00000000 to 0x0000001C.


Все бы хорошо, но при попытке записать вектора в область 0xFFFF0000, проц вообще впадает в ступор, отладчик просто отваливается с матюками
Вот что из UM:
Цитата
The ARM968E-S processor has its exception vectors located at address logic 0. Since
flash is the only non-volatile memory available in the LPC29xx, the exception vectors in
the flash must be located at address logic 0 at reset (AHB_RST).


After booting a choice must be made for region 0. When enabled, the Tightly Coupled
Memories (TCMs) occupy fixed address locations in region 0


то есть приходим к тому же самому. Как включить TCM и при этом сохранить вектора также с адреса 0?
Не понимаю, хоть тресни sad.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 3 2013, 14:30
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(toweroff @ Jun 3 2013, 18:25) *
то есть приходим к тому же самому. Как включить TCM и при этом сохранить вектора также с адреса 0?
Не понимаю, хоть тресни sad.gif

А что мешает прописать вектора в TCM?
Go to the top of the page
 
+Quote Post
toweroff
сообщение Jun 3 2013, 15:02
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(aaarrr @ Jun 3 2013, 18:30) *
А что мешает прописать вектора в TCM?

потому что как только отрабатывает этот код, копирующий из Flash вектора в регион 0, я сваливаюсь в Abort
Код
    PRESERVE8

    AREA    CODE,READONLY

VECTOR_RAM_SRC        EQU        0x80000000
VECTOR_FLASH_SRC    EQU        0x20000000
VECTOR_DST            EQU        0x00000000

    EXPORT VectorRemap
    AREA BlockCopy, CODE, READONLY    ; name this block of code

VectorRemap
    STMFD   sp!, {r0, r1, r4-r11}; save registers

    LDR     r0, =VECTOR_FLASH_SRC; r0 = pointer to source block

    LDR     r1, =VECTOR_DST    ; r1 = pointer to destination block      
    LDMIA   r0!, {r4-r11}    ; remap first 16 words from 0x20000000
    STMIA   r1!, {r4-r11}    ; to address 0x00000000 for interrupt
    LDMIA   r0!, {r4-r11}    ; exception handler
    STMIA   r1!, {r4-r11}  
    
    LDMFD   sp!, {r0, r1, r4-r11}; restore registers

    END

точнее - сразу после LDMFD
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 3 2013, 15:07
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(toweroff @ Jun 3 2013, 19:02) *
сразу после LDMFD

Если это подпрограмма, то сразу после LDMFD у Вас отсутствует инструкция возврата.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Jun 3 2013, 15:23
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(aaarrr @ Jun 3 2013, 19:07) *
Если это подпрограмма, то сразу после LDMFD у Вас отсутствует инструкция возврата.

понятно, спасибо
Код
LDMIA     R13!,{R4,PC}


и вопрос решен

PS. Нефиг копипастить sm.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 3 2013, 15:30
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Ну, я бы сделал так:
Код
VectorRemap
    STMFD   sp!, {r4-r9}    ; save registers

    LDR     r0, =VECTOR_FLASH_SRC; r0 = pointer to source block

    LDR     r1, =VECTOR_DST    ; r1 = pointer to destination block      
    LDMIA   r0!, {r2-r9}    ; remap first 16 words from 0x20000000
    STMIA   r1!, {r2-r9}    ; to address 0x00000000 for interrupt
    LDMIA   r0!, {r2-r9}    ; exception handler
    STMIA   r1!, {r2-r9}  
    
    LDMFD   sp!, {r4-r9}    ; restore registers
    MOV     pc, lr
Go to the top of the page
 
+Quote Post
toweroff
сообщение Jun 3 2013, 15:36
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Просто я посмотрел, как генерит код Keil и по аналогии
Go to the top of the page
 
+Quote Post
toweroff
сообщение Jun 10 2013, 20:26
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Еще вопрос
Exception вектора записаны как
Код
LDR Reset
...

я копирую вектора из области 0x20000000 в 0x00000000 и, конечно, в итоге нифига не получаю перехода на первую команду обработки исключения, ибо она лежит вне диапазона относительного перехода
Какой выход?
Я так вижу, что собрать аналогичный код, но уже в диапазоне remap, и собрать их скаттером "поближе"
Или я бью гору, а шоссе рядом? sm.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 10 2013, 20:50
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(toweroff @ Jun 11 2013, 00:26) *
Еще вопрос
Exception вектора записаны как
Код
LDR Reset
...

Ну, так они точно не могут быть записаны sm.gif Можете привести код дословно?
Go to the top of the page
 
+Quote Post
toweroff
сообщение Jun 10 2013, 21:20
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(aaarrr @ Jun 11 2013, 00:50) *
Ну, так они точно не могут быть записаны sm.gif Можете привести код дословно?

легко sm.gif
Код
ResetStart
    LDR     PC, ResetAddr
    LDR     PC, CheckUndefined    ; UndefinedAddr
    LDR     PC, CheckUndefined    ; SWI_Addr
    LDR     PC, CheckPrefetch    ; PrefetchAddr
    LDR     PC, CheckAbort        ; DataAbortAddr
    LDR     PC, CheckReserved    ; ReservedAddr
    LDR     PC, IRQ_Addr        ;IRQ_Addr        ; IRQ_Addr
    LDR     PC, FIQ_Addr        ; FIQ_Addr

сейчас (пока sm.gif ) все злопыхание с этим вот...
это вот - злопыханья Кейла с его стартапом

копаю доку на арм и никак не могу понять - там должна (в векторе) быть команда или адрес перехода...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 10 2013, 21:39
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(toweroff @ Jun 11 2013, 01:20) *
копаю доку на арм и никак не могу понять - там должна (в векторе) быть команда или адрес перехода...

Команда.

ldr pc, XXX - это на самом деле ldr pc, [pc, #offset]. Если переменные с адресами (ResetAddr, CheckUndefined и т.п.) копируются в TCM вместе с векторами, то все должно работать. Просто посмотрите дизассемблер этого куска.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Jun 10 2013, 21:59
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(aaarrr @ Jun 11 2013, 01:39) *
Команда.

ldr pc, XXX - это на самом деле ldr pc, [pc, #offset]. Если переменные с адресами (ResetAddr, CheckUndefined и т.п.) копируются в TCM вместе с векторами, то все должно работать. Просто посмотрите дизассемблер этого куска.

конечно посмотрел
пободался со скаттером... вроде как поднялось.
И началось sm.gif то ли память быстрая, то ли что..
устройство должно "кушать" от меня, как от мастера ии2
пока в ITCM не запихал код - все было ок, в том числе и от SRAM на AHB
и спать бы, и добить кусок, черт его дери sm.gif в и2си все на прерывании, давно все отрегулировано. Перенес код (считай сейчас - в ITCM) - всем кранты...
Go to the top of the page
 
+Quote Post

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

 


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


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