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

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> AT91RM9200 - разбиение кода на быструю и медленную части, SDRAM и внутренняя SRAM
Antokha
сообщение Nov 4 2008, 16:44
Сообщение #16


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 20-10-08
Из: Нижний Новгород
Пользователь №: 41 078



Всем откликнувшимся огромное спасибо!
ИТОГО: прошивку компилить полность в SDRAM, после её запуска (копирования) romboot-ом первыми командами прошивки скопировать вектора из начала прошивки (находящейся в SDRAM), активировать кеши и далее по программе.

Где почитать по Traslation Table? Полазил по форуму ничего что-то не увидел.
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Nov 4 2008, 19:48
Сообщение #17


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Читать тут : http://infocenter.arm.com/help/topic/com.a...920T_TRM1_S.pdf. Раздел 3.3 Address translation.
Go to the top of the page
 
+Quote Post
Antokha
сообщение Nov 5 2008, 18:23
Сообщение #18


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 20-10-08
Из: Нижний Новгород
Пользователь №: 41 078



Спасибо за ссылку. Согласно ей в регистр TTB нужно записать указатель на блок в памяти размером в 16 кбайт. Этот блок должен содержать необходимые процедуры, которые я хочу кэшировать. Кроме этого необходимо записать 1 в бит I регистра 1 сопроцессора CP15.
Какие либо ещё действия производить нужно?
На работе есть этот pdf-ник, но этот раздел я пропустил, начал читать почему-то с раздела 4. Решил включить кеш инструкций записью 1 в первый регистр сопроцессора сразу в файле cstartup, но так и не понял какой командой это можно осуществить.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 5 2008, 18:39
Сообщение #19


Гуру
******

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



Цитата(Antokha @ Nov 5 2008, 21:23) *
Спасибо за ссылку. Согласно ей в регистр TTB нужно записать указатель на блок в памяти размером в 16 кбайт. Этот блок должен содержать необходимые процедуры, которые я хочу кэшировать.

Этот блок должен содержать таблицу, в которой описывается адресное пространство и типы кэширования.

Цитата(Antokha @ Nov 5 2008, 21:23) *
Кроме этого необходимо записать 1 в бит I регистра 1 сопроцессора CP15.
Какие либо ещё действия производить нужно?

Еще нужно поменять режим тактирования ядра (Synchronous или Asynchronous вместо FastBus), включить DCache и MMU, по желанию включить проверку выравнивания данных.

Цитата(Antokha @ Nov 5 2008, 21:23) *
На работе есть этот pdf-ник, но этот раздел я пропустил, начал читать почему-то с раздела 4. Решил включить кеш инструкций записью 1 в первый регистр сопроцессора сразу в файле cstartup, но так и не понял какой командой это можно осуществить.

Код
        mrc        p15, 0x00, r0, c1, c0, 0x00; read CP15 register 1 into r0
        orr        r0, r0, #(0x01 << 0x0c)    ; enable I Cache
        mcr        p15, 0x00, r0, c1, c0, 0x00; write cp15 register 1

Но одного ICache до обидного мало.
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Nov 5 2008, 19:44
Сообщение #20


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



А самое главное, после всего этого at91rm9200, наконец-то заработает на полную мощь!
Go to the top of the page
 
+Quote Post
Antokha
сообщение Nov 5 2008, 19:49
Сообщение #21


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 20-10-08
Из: Нижний Новгород
Пользователь №: 41 078



Я так думаю, что мне нужен только ICache из-за того, что в моей программе есть две функции, которые я отладил по времени выполнения, при этом они располагаются во внутренней SRAM. Вся программа туда не убирается, приходиться кешировать функции (программа при этои запускается из SDRAM). Эти две функции "читают" с определенной периодичностью состояние вывода и сохраняют его в стек (он расположен также во внутр. SRAM).

Сообщение отредактировал Antokha - Nov 5 2008, 19:54
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Nov 5 2008, 20:11
Сообщение #22


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Я уже говорил, что "вылизывание" времени выполнения функций - это не вариант. Естъ же таймеры. Кто мешает их запрограммировать на нужную частоту и по прерыванию от таймера нужные функции вызывать? Это и будет правильное решение задачи.
Go to the top of the page
 
+Quote Post
Antokha
сообщение Nov 5 2008, 20:53
Сообщение #23


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 20-10-08
Из: Нижний Новгород
Пользователь №: 41 078



Я их собственно не "вылизывал". Просто написал программу, скорректировал неточности, на которые мне указал компилятор и измерил осциллографом время выполнения. В итоге получил время выполнения, которое равняется предельному максимально допустимому. Поэтому в использовании таймеров я не вижу нечего хорошего. В принципе может быть это и правильный подход. Но из-за не всегда одинакового времени входа в прерывание, могут появиться неточности в моментах считывания состояния пина. Этих неточностей у меня и так достаточно по причинам от меня совершенно независящим, но которые мне в программе необходимо минимизировать. Возможно решить проблему компенсации неточностей возможно установкой частоты тактирования периферии 80 МГц, как многие советуют. Но я не нашел допустимых пределов установки этой частоты. Имеющийся .xsl файлик для вычисления значений коэффициентов PLL, а также других делителей при выставлении такого режима выделяет такую частоту красным цветом, что как я понимаю не есть хорошо. Особенно это может сказаться при дальнейшем серийном производстве и при работе в достаточно широком диапазоне температур.

К aaarrr: Надо вспоминать дескрипторы, так как насчет таблицы, описывающей адресное пространство я ничего не понял. sad.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 6 2008, 06:08
Сообщение #24


Гуру
******

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



Цитата(Antokha @ Nov 5 2008, 22:49) *
Я так думаю, что мне нужен только ICache из-за того, что в моей программе есть две функции, которые я отладил по времени выполнения, при этом они располагаются во внутренней SRAM.
...
Эти две функции "читают" с определенной периодичностью состояние вывода и сохраняют его в стек (он расположен также во внутр. SRAM).

Расскажите поподробнее об этих двух загадочных функциях, а то есть подозрение, что Вы выбрали не лучший способ решения проблемы.

Цитата(Antokha @ Nov 5 2008, 23:53) *
Я их собственно не "вылизывал". Просто написал программу, скорректировал неточности, на которые мне указал компилятор и измерил осциллографом время выполнения. В итоге получил время выполнения, которое равняется предельному максимально допустимому.

А Вы учитывали тот факт, что процессор в режиме FastBus работает на частоте шины?

Цитата(Antokha @ Nov 5 2008, 23:53) *
К aaarrr: Надо вспоминать дескрипторы, так как насчет таблицы, описывающей адресное пространство я ничего не понял. sad.gif

Почитайте документ внимательно. Могу выложить пример инициализации на асме, если это облегчит жизнь.
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Nov 6 2008, 06:58
Сообщение #25


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Если сейчас функции работают на пределе необходимой скорости:
1. Выбран не тот процессор.
2. Плохо написаны функции.
3. При правильно инициированных I- и D-cache скорость работы повысится минимум в 3-5 раз.
4. В реально работающей системе скорость работы функции не может быть абсолютно стабильной.
5. Если скорость обработки "впритык", когда же процессор будет делать еще что-то полезное?
Go to the top of the page
 
+Quote Post
Antokha
сообщение Nov 6 2008, 18:52
Сообщение #26


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 20-10-08
Из: Нижний Новгород
Пользователь №: 41 078



\
Цитата(sergeeff @ Nov 6 2008, 09:58) *
Если сейчас функции работают на пределе необходимой скорости:
1. Выбран не тот процессор.
2. Плохо написаны функции.
4. В реально работающей системе скорость работы функции не может быть абсолютно стабильной.
5. Если скорость обработки "впритык", когда же процессор будет делать еще что-то полезное?

На момент отладки я кеши не включал, так как не видел необходимости в этом. Скорость обработки почти "впритык", небольшой запас есть (примерно 1-2 команды NOP. ею я релизую задержки,) хотелось бы иметь запас побольше. Во время выполнения этих двух функций контроллеру разрешается выполнение только их и ничего более.
Насчёт пункта 1 - до этого приложение было реализовано на микроконтроллере SX52 фирмы Scenix, без компенсации вышеописанных неточностей его производительности хватало (по сравнению с at91rm9200 он быстрее работает с выводами - быстрее осуществляется и чтение и установка выводов в нужное состояние). Для компенсации неточностей "оцифруемого' сигнала его производительности не хватало, я решил взять что-то побыстрее.
\
Цитата(sergeeff @ Nov 6 2008, 09:58) *
3. При правильно инициированных I- и D-cache скорость работы повысится минимум в 3-5 раз.

Это окрыляет, надеюсь когда я их таки включу так и будет.

Цитата(aaarrr @ Nov 6 2008, 09:08) *
А Вы учитывали тот факт, что процессор в режиме FastBus работает на частоте шины?

Нет не знал, какая имеется в виду частота шины? PCK идущая с выхода PLLA, у меня 179,... МГц, точно не помню.
Цитата(aaarrr @ Nov 6 2008, 09:08) *
Почитайте документ внимательно. Могу выложить пример инициализации на асме, если это облегчит жизнь.

Собственно я не разобрался в следующем:
- что представляют собой ячейки таблицы (я так понял что вроде бы это части абсолютных адресов),
- мне нужно выполнять эти две функции со скоростью не менее чем при отладке во внутренней SRAM с PCK = 179,... МГц.
А насчёт примера это бы очень помогло, если не сильно это вас затруднит.

Сообщение отредактировал Antokha - Nov 6 2008, 19:44
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 6 2008, 19:57
Сообщение #27


Гуру
******

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



Цитата(Antokha @ Nov 6 2008, 21:52) *
Насчёт пункта 1 - до этого приложение было реализовано на микроконтроллере SX52 фирмы Scenix, без компенсации вышеописанных неточностей его производительности хватало (по сравнению с at91rm9200 он быстрее работает с выводами - быстрее осуществляется и чтение и установка выводов в нужное состояние). Для компенсации неточностей "оцифруемого' сигнала его производительности не хватало, я решил взять что-то побыстрее.

AT91RM9200 и другие подобные контроллеры принципиально не подходят для решения таких задач. Используйте программируемую логику, если нужно получить жесткие времянки.

Цитата(Antokha @ Nov 6 2008, 21:52) *
Нет не знал, какая частота шины? PCK идущая с выхода PLLA (у меня 179,... МГц)

Это Master Clock (MCK), обычно PCK/2. PCK без дополнительных телодвижений процессором использоваться не будет.

Цитата(Antokha @ Nov 6 2008, 21:52) *
- что представляют собой ячейки таблицы (я так понял что вроде бы это части абсолютных адресов),

Объяснять "на пальцах" будет долго. Лучше найдите время изучить документацию.

Цитата(Antokha @ Nov 6 2008, 21:52) *
А насчёт примера это бы очень помогло, если не сильно это вас затруднит.

Пожалуйста:
CODE

; ***************************************************************************
; *

ttb_first_level EQU 0xc03fc000


; ***************************************************************************
; * Cache and MMU Configuration

[ {TRUE}
ldr r0, =ttb_first_level ; set start of Translation Table base (16k Boundary)
mcr p15, 0x00, r0, c2, c0, 0x00 ; write to CP15 register 2
;
; Create translation table for flat mapping
; Top 12 bits of VA is pointer into table
; Create 4096 entries from 000xxxxx to fffxxxxx
;
mov r1, #0x00 ; loop counter
ldr r2, =2_110111110010 ; set access permissions (AP) for full access SVC/USR (11:10)
; set for domain 15 (8:5)
; must be 1 (4)
; set non cachable non bufferable (CB) (3:2)
; set for 1Mb section (1:0)
init_ttb0
orr r3, r2, r1, lsl #0x14
ldr r4, =sections
init_ttb1
ldr r5, [r4], #0x04
tst r5, #0x01
bne init_ttb2
cmp r1, r5, lsr #0x14
addlo r4, r4, #0x08
blo init_ttb1
ldr r5, [r4], #0x04
cmp r1, r5, lsr #0x14
addhs r4, r4, #0x04
bhs init_ttb1
ldr r5, [r4]
orr r3, r3, r5
init_ttb2
str r3, [r0, r1, lsl #0x02]
add r1, r1, #0x01
cmp r1, #0x1000
blo init_ttb0
;
; Init domains
;
mov r0, #(2_01 << 0x1e) ; must define behaviour for domain 15 (31:30), set client
mcr p15, 0x00, r0, c3, c0, 0x00 ; write to CP15 register 5
;
; Set global core configurations
;
mrc p15, 0x00, r0, c1, c0, 0x00 ; read CP15 register 1 into r0

orr r0, r0, #(0x01 << 0x0c) ; enable I Cache
orr r0, r0, #(0x01 << 0x02) ; enable D Cache
orr r0, r0, #(2_11 << 0x1e) ; enable asynchronous clocking mode
orr r0, r0, #0x01 ; enable MMU
;
; Additional configuration options
;
; orr r0, r0, #(0x01 << 0x0e) ; enable Round Robin cache replacement
; orr r0, r0, #(0x01 << 0x0d) ; enable Hi Vectors
orr r0, r0, #(0x01 << 0x01) ; enable data address alignment checking

mcr p15, 0x00, r0, c1, c0, 0x00 ; write cp15 register 1
]

; ***************************************************************************
; *

sections
DCD 0x00000000 ; Flash
DCD 0x00100000
DCD 2_1100 ; wb, buffered

DCD 0xc0000000 ; SDRAM Page 0
DCD 0xc0400000
DCD 2_1100 ; wb, buffered

DCD 0xc4000000 ; SDRAM Page 1
DCD 0xc4400000
DCD 2_0100 ; noncached, buffered

DCD 0xc8000000 ; SDRAM Page 2
DCD 0xc8400000
DCD 2_0100 ; noncached, buffered
; DCD 2_1100 ; wb, buffered

DCD 0xcc000000 ; SDRAM Page 3
DCD 0xcc400000
DCD 2_1100 ; wb, buffered

DCD 0x00000001 ; END

; ***************************************************************************
; *

END

Адреса только переделайте под свою систему.
Go to the top of the page
 
+Quote Post
Antokha
сообщение Nov 7 2008, 14:21
Сообщение #28


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 20-10-08
Из: Нижний Новгород
Пользователь №: 41 078



Огромное спасибо за пример.
Go to the top of the page
 
+Quote Post
dch
сообщение Nov 7 2008, 15:56
Сообщение #29


Профессионал
*****

Группа: Участник
Сообщений: 1 179
Регистрация: 15-09-04
Из: 141070 г. Королев МО, улица Горького 39-121
Пользователь №: 661



Вы случайно не внешнее ацп подвесили на этот чудный девайс

Сообщение отредактировал dch - Nov 7 2008, 15:58
Go to the top of the page
 
+Quote Post
Antokha
сообщение Nov 7 2008, 16:35
Сообщение #30


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 20-10-08
Из: Нижний Новгород
Пользователь №: 41 078



Цитата(dch @ Nov 7 2008, 18:56) *
Вы случайно не внешнее ацп подвесили на этот чудный девайс

Нет, Я просто так выразился 'оцифровка", на самом деле читается только состояние пина и не более того.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 05:00
Рейтинг@Mail.ru


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