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

 
 
3 страниц V  < 1 2 3  
Reply to this topicStart new topic
> AT91SAM9260, Помогите с прерываниями
crack_enigma
сообщение Jul 27 2009, 04:54
Сообщение #31


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 6-07-07
Пользователь №: 28 939



Благодарю за ответ.

Цитата
Bootloader делает remap, загружает кусок программы в SRAM (она расположена по адресу 0) и передает ей управление. Все остальное - инициализацию кэшей, SDRAM, загрузку остальной программы - нужно делать самостоятельно.


то есть если я правильно понимаю само загрузится из флеши на SPI первые 4 кб ? (с адресов 0х1000 0000 до 0х1000 0000 + 0х1000). На этих 4кнеобходимо настроить тактирование, стеки , и загрузить из флеши в SDRAM какую либо программу (часть данных флеши или всё что там есть). передать управление на неё можно просто вызвав функцию по адресу SDRAM ( 0x2000 0000). ?

Прерывания IRQ идут через AIC по программируемым там адресам (те их можно менять в процессе работы и проблем ссылки на SDRAM не должно быть).

Другие обработчики Прерывания:

__irq __arm void Undefined_Handler(void);
__irq __arm void SWI_Handler(void);.
__irq __arm void Prefetch_Handler(void);
__irq __arm void Abort_Handler(void);

могут быть как в SRAM так и SDRAM.

Но есть 1 НО: SDRAM c адреса 0x2000 0000 если в boot программе из SRAM ссылаться на SDRAM для Undefined_Handler то нужен жесткий адрес по которому располагается этот обработчик. Так вот как IAR заставить его там расположить по требуемому адресу? Или есть более рациональное решение?

Также интересует ситуация: по хорошему boot программа из флеши должна уметь обновлять прошивку основной. При этом процессе может случиться Undefined_Handler и результат плачевен. (ведь в SDRAM пусто - самаписная boot вся в sram). Как разрешить подобную ситуацию?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jul 27 2009, 13:16
Сообщение #32


Гуру
******

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



Цитата(crack_enigma @ Jul 27 2009, 08:54) *
то есть если я правильно понимаю само загрузится из флеши на SPI первые 4 кб ? (с адресов 0х1000 0000 до 0х1000 0000 + 0х1000). На этих 4кнеобходимо настроить тактирование, стеки , и загрузить из флеши в SDRAM какую либо программу (часть данных флеши или всё что там есть). передать управление на неё можно просто вызвав функцию по адресу SDRAM ( 0x2000 0000). ?

Само загрузит столько, сколько пропишите на месте reserved вектора. Но не более, чем физически есть памяти, естественно.
И не с адреса 0х10000000 (откуда вообще эта цифра?), а с 0, т.к. ремап уже сделан.
Управление после загрузки передаете любым способом, можно и вызовом фиктивной функции.


Цитата(crack_enigma @ Jul 27 2009, 08:54) *
Но есть 1 НО: SDRAM c адреса 0x2000 0000 если в boot программе из SRAM ссылаться на SDRAM для Undefined_Handler то нужен жесткий адрес по которому располагается этот обработчик. Так вот как IAR заставить его там расположить по требуемому адресу? Или есть более рациональное решение?

Также интересует ситуация: по хорошему boot программа из флеши должна уметь обновлять прошивку основной. При этом процессе может случиться Undefined_Handler и результат плачевен. (ведь в SDRAM пусто - самаписная boot вся в sram). Как разрешить подобную ситуацию?

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

На самом деле, нужно сделать два совершенно раздельных проекта:
1. Boot. Делает минимальную настройку процессора, загружает программу в SDRAM, передает управление.
2. Основная программа. Скомпилирована для работы из SDRAM, содержит отдельный asm-файл с областью векторов, который средствами линкера укладывается по нулевому адресу.
Go to the top of the page
 
+Quote Post
crack_enigma
сообщение Jul 28 2009, 12:08
Сообщение #33


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 6-07-07
Пользователь №: 28 939



благодарю за ответ aaarrr. Понимаю всё это с трудом, поэтому если можешь поправь следующие расcуждения:

Цитата
И не с адреса 0х1000 0000 (откуда вообще эта цифра?)

Как я понял (из основного распределения памяти даташита) SPI dataFlash находится по этому адресу. До тех пор пока не будет remp = 0 и BMS = 0. Или я чтото серьёзно путаю?

Цитата
Bootloader делает remap, загружает кусок программы в SRAM (она расположена по адресу 0) и передает ей управление.

Те по сути загружает код из флешь в SRAM1 и remp = 1 . По адресу 0 стала ведь SRAM1. В ней до 4k программы.

сразу вопрос AT45DB161D имеет страницы по 528/512. Загрузится из 1ой первый 512 потом из второй первые 512 итд а оставшиеся 26 в каждой странице для нужд программиста. или будут грузится все 528 байт?

В этом за груженом куске я настраиваю кешь, тактирование.
Цитата
Все остальное - инициализацию кэшей, SDRAM,

Те её нужно ещё настраивать? А defunct советовал отлаживать программу в SDRAM? Поймите меня правильно на той плате что сейчас у меня SDRAM нет (конструктора так постарались), но на следующей версии будет. По этому важно знать можно ли сразу с J-Link будет в неё грузить?

Объём загруженного кода определяется значением что был по 0x14 (RESERVED) в SPI dataFlash

Далее загружаю из ФЛЕШЬ в SDRAM и перехожу на неё вызывая фиктивную функцию.

Цитата
Ничего не понял, если честно. Почему так именно Undefined_Handler покоя не дает?

Он для примера. Просто не хочется остовлять ситуации в которые может попасть процесор и обработчика там не будет. Результат кажется сложно предсказуемым, да и узнать что случилось "именно така" ситуация становится не возможным.

Цитата
После загрузки, основная программа может совершенно спокойно записать в область векторов что-то свое.

каким образом? там ведь выполняемый код? (хоть и перезаписываемый) можно пример?

Прошу извинение за докучливость, но очень нужно разобраться.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jul 28 2009, 12:22
Сообщение #34


Гуру
******

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



Цитата(crack_enigma @ Jul 28 2009, 16:08) *
Как я понял (из основного распределения памяти даташита) SPI dataFlash находится по этому адресу. До тех пор пока не будет remp = 0 и BMS = 0. Или я чтото серьёзно путаю?

SPI DataFlash вообще не может быть отмаплена в адресное пространство. По адресу 0x10000000 расположено пространство нулевого чипселекта параллельной шины.

Цитата(crack_enigma @ Jul 28 2009, 16:08) *
Те по сути загружает код из флешь в SRAM1 и remp = 1 . По адресу 0 стала ведь SRAM1. В ней до 4k программы.

Да.

Цитата(crack_enigma @ Jul 28 2009, 16:08) *
сразу вопрос AT45DB161D имеет страницы по 528/512. Загрузится из 1ой первый 512 потом из второй первые 512 итд а оставшиеся 26 в каждой странице для нужд программиста. или будут грузится все 528 байт?

Хм, никогда не задавался таким вопросом. Но это легко можно проверить.

Цитата(crack_enigma @ Jul 28 2009, 16:08) *
Те её нужно ещё настраивать? А defunct советовал отлаживать программу в SDRAM? Поймите меня правильно на той плате что сейчас у меня SDRAM нет (конструктора так постарались), но на следующей версии будет. По этому важно знать можно ли сразу с J-Link будет в неё грузить?

Инициализировать нужно. Можно сделать это и скриптом при помощи J-Link.

Цитата(crack_enigma @ Jul 28 2009, 16:08) *
каким образом? там ведь выполняемый код? (хоть и перезаписываемый) можно пример?

Какой код? Для стартующей программы там просто такая же память, как и любая другая.
Для IAR'а пример не дам, т.к. им не пользуюсь. Работа со скриптом линкера должна быть описана в документации.
Go to the top of the page
 
+Quote Post
crack_enigma
сообщение Jul 28 2009, 12:49
Сообщение #35


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 6-07-07
Пользователь №: 28 939



Цитата
Цитата
сразу вопрос AT45DB161D имеет страницы по 528/512. Загрузится из 1ой первый 512 потом из второй первые 512 итд а оставшиеся 26 в каждой странице для нужд программиста. или будут грузится все 528 байт?

Хм, никогда не задавался таким вопросом. Но это легко можно проверить.

А как?


Цитата
Цитата
каким образом? там ведь выполняемый код? (хоть и перезаписываемый) можно пример?

Какой код? Для стартующей программы там просто такая же память, как и любая другая.
Для IAR'а пример не дам, т.к. им не пользуюсь. Работа со скриптом линкера должна быть описана в документации.

Буду искать данный момент, но в чём сущность этого скрипта? Те как он поможет переместить в момент выполнения в заданные адреса код ? Если есть пример под keil или другую систему тоже поможет (по аналогии легче будет разобраться).
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jul 28 2009, 12:59
Сообщение #36


Гуру
******

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



Цитата(crack_enigma @ Jul 28 2009, 16:49) *
А как?

Записать блок Самбой, потом вычитать программой из процессора.

Цитата(crack_enigma @ Jul 28 2009, 16:49) *
Буду искать данный момент, но в чём сущность этого скрипта? Те как он поможет переместить в момент выполнения в заданные адреса код ? Если есть пример под keil или другую систему тоже поможет (по аналогии легче будет разобраться).

Суть в том, что при старте программы отрабатывает библиотечный загрузчик, который распаковывает и копирует секции кода и данных в предназначенные им места и инициализирует секции zero-init (bss/ZI).

Пример для Keil'а:
Код
FLASH 0x00120000 0x00020000
{
    FLASH 0x00100000 0x00020000
    {
        * (startup, +First)
        * (+RO)
    }
    RAM 0x00000000 0x00010000
    {
        vectors.o (vectors, +First)
        * (+RW, +ZI)
    }
}

Здесь все Read Only секции (код, данные) останутся на месте, содержимое файла vectors.s размещено с нулевого адреса RAM, за ним будут расположены RW- и ZI-данные.
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Jul 28 2009, 14:43
Сообщение #37


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Датафлэш работает с 528 байтами. 512 - исключительное и исключительно редкое состояние. И никому не нужное.
--
Насклько я представляю, НИЧЕГО автматически не делается. Никто ничего никуда не размещает. Вернее, размещает, но при компиляции-линковке. И размещает в файле. А дальше - как сам хочешь..


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jul 28 2009, 15:15
Сообщение #38


Гуру
******

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



Цитата(DpInRock @ Jul 28 2009, 18:43) *
Датафлэш работает с 528 байтами. 512 - исключительное и исключительно редкое состояние. И никому не нужное.

Это теоретически, или проверяли на самом деле?

Цитата(DpInRock @ Jul 28 2009, 18:43) *
Насклько я представляю, НИЧЕГО автматически не делается. Никто ничего никуда не размещает. Вернее, размещает, но при компиляции-линковке. И размещает в файле. А дальше - как сам хочешь..

Из вашего сообщения НИЧЕГО нельзя понять. О чем речь-то?
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Jul 28 2009, 23:19
Сообщение #39


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Про 528. Это трудно не проверить. Ибо у меня кроме Rs232 никаких других средств нет.
Пишу в датуфлэш секторами по 528. И грузится она замечательно. Вполне вероятно, что загрузчик может легко и сам определить размер сектора и грузить соотвтественно. Ничего ему не мешает.
Но при решении о размере сектора сильное влияние оказал даташит на датуфлэш, который запугал последствиями перехода на 512.


2 А хотел я сказать вот что. Продуктом компиляции является бинарник. Конечным продуктом. И сам себя он не загрузит и не рассует по закоулкам.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jul 28 2009, 23:37
Сообщение #40


Гуру
******

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



Цитата(DpInRock @ Jul 29 2009, 03:19) *
2 А хотел я сказать вот что. Продуктом компиляции является бинарник. Конечным продуктом. И сам себя он не загрузит и не рассует по закоулкам.

Бинарник содержит в себе стандартные средства, которые и загрузят и рассуют все как надо.
Go to the top of the page
 
+Quote Post

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

 


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


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