Перейти к содержанию
    

возвращаясь к первому сообщению, кто-нибудь может объяснить толково как правильно залить программу в Dataflash чтобы она потом запустилась из внешней SDRAM?

1. если использую flashloader, то программа как-будто пишется, но не стартует при подаче питания - SDRAM что ли не инициализировалась....не понятно

2. написала загрузчик, который с нужного адреса Dataflash копирует программу в SDRAM и перехожу на начало программы в SDRAM - без прерываний работают простенькие проги, с прерываниями - нет. В чем подвох может быть?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. Главу Boot Program пересказывать не имеет смысла. Ее надо читать.

2. Вектора находятся в SRAM

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сложновато-сложновато, всё равно((

 

Например подёргать ногами на AVR можно просто (напримере IAR)

DDRC = 255;

PORTC = 255;

 

сколько не искал подобные констркукции для ARM... не нашёл((

 

Как осуществляется доступ к PA0... PA31, PB0... PB31 и т.д.

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

 

P.S. Наверное нужно и впрям запастись мешком семечек и курить даташит....

Изменено пользователем Zelepuk

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Boot Program читан, FlashLoaderGuide перечитан, все легко и просто - прописал путь до загрузчика, подцепил mac файл, где инициализируется SDRAM и все должно работать... Но ведь не работает! В надежде, что не я первая стою на этих граблях, надеюсь на помощь )

 

Что касается векторов прерываний, то они как были в SRAM, так и лежат там себе... Первое прерывание (работаю с touch screen) обрабатывается, но из него не выходит программа, то есть прерывание не сбрасывается? но при загрузке проги напрямую в SDRAM обработка прерываний идет нормально

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Boot Program читан, FlashLoaderGuide перечитан, все легко и просто - прописал путь до загрузчика, подцепил mac файл, где инициализируется SDRAM и все должно работать... Но ведь не работает! В надежде, что не я первая стою на этих граблях, надеюсь на помощь )

 

Что касается векторов прерываний, то они как были в SRAM, так и лежат там себе... Первое прерывание (работаю с touch screen) обрабатывается, но из него не выходит программа, то есть прерывание не сбрасывается? но при загрузке проги напрямую в SDRAM обработка прерываний идет нормально

 

присоединяюсь... только про mac-файл бы узнать подробнее)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если читан и перечитан, то какие могут быть "вроде"?

Научитесь для начала в SRAM программы запускать.

Потом, если надо будет SDRAM -

Программа из датафлэш грузится в SRAM, переписывает настоящую программу, написанную и откомпилированную для

SDRAM (предварительно инициализировав оную).

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

 

После чего уже джамп на начало SDRAM.

Естественно, никакой инициализации SDRAM после этого. И вообще - никакой инициализации. Все - в первоначальном загрузчике делать.

---

По жизни вот так делать.

 

1. Пишем программы для SRAM и тренируемся их запускать.

2. Компилируем программу для SDRAM и с помощью одной из уже написанный программок засовываем ея в датафлэш куда-нибудь в серединку.

3. После чего грузим в SDRAM программку, которая токо и умеет, что инициализировать PLL+SDRAM? копировать программу из п.2 в SDRAM и запускать оную

4. После удачи, программку из пункта 3 обзываем загрузчиком и запихиваем ее в датафлэш уже с нулевого адреса.

 

Все.

 

Изменено пользователем DpInRock

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну черт знает, так и делаю, но когда в SDRAMном проекте есть прерывания, программа зависает. А так - я тоже домозговала до этих 4 пунктов

 

 

Zelepuk, дергайте же уже ногами =)

 

AT91C_BASE_PIOA->PIO_PER = (AT91C_PIO_PA28); //PIO Enable Register

AT91C_BASE_PIOA->PIO_PPUDR = (AT91C_PIO_PA28); //Pull-up Disable Register

AT91C_BASE_PIOA->PIO_SODR = (1 << 28); //Set Output Data Register

AT91C_BASE_PIOA->PIO_OER = (AT91C_PIO_PA28); //Output Enable Register

 

AT91C_BASE_PIOA->PIO_SODR = (1 << 28); // 1

AT91C_BASE_PIOA->PIO_CODR = (1 << 28); // 0

 

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

 

а не могли бы вы подробнее рассказать про всовывание команды выборки из AIC в стартап? как совать? )

заранее благодарю!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кэт, программка может виснуть по сотне причин.

Тут уже вступает в силу такое правило: посмотрите стартап файл и разберитесь - а за каким чертом он нужен.

 

ldr PC, [PC,# -0xF20] ;AIC direct

 

Вот такая строчка должна быть для IRQ вектора. (ОНа может быть и другая, но вот такая - будет работать с SDRAM без дополнительных телодвижений) (Это кстати подробнейшим образом описывается в разделе про аик в даташите.)

 

(В этом случае вы оформляете прерывание как __arm __irq и его адрес пишете напрямую в аик -- Процедура обработки будет вызываться сразу, минуя все промежуточные этапы, которые любят использовать в примерах).

 

Далее.

Для работы просто необходимо сделать общение с компом по 232.

Изменено пользователем DpInRock

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

(В этом случае вы оформляете прерывание как __arm __irq и его адрес пишете напрямую в аик -- Процедура обработки будет вызываться сразу, минуя все промежуточные этапы, которые любят использовать в примерах).

 

В примерах это делается для организации вложенных прерываний.

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

 

Блин, почему книжки никто не читает. Тревор Мартин не плохо все это описывает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В примерах это делается для организации вложенных прерываний

Вовсе нет.

Организация вложенности делается совершенно по-другому.

Хуже того, насколько я помню, в примерах вложенные прерывания нигде не применяются.

 

Для вложенности требуется во первых разрешать прерывания изнутри обработчика. Это как минимум. (Я не говорю о манипуляциях с аик (просто точно не помню, а лезть неохота).

А для этого применяют волшебное слово __nested

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну черт знает, так и делаю, но когда в SDRAMном проекте есть прерывания, программа зависает. А так - я тоже домозговала до этих 4 пунктов

 

Надеюсь вы не забыли сделать remap памяти, чтобы ваша sram читалась/писалась с нулевого адреса? А потом уже туда копировать таблицу векторов прерываний.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вообще, лучше проверять местонахождение программы и выполнять или не выполнять ремап.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

 

При загрузке какой программы? Чего там происходит автоматически?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Прочитайте раздел даташита о последовательности действий загрузчика при поиске программ на допустимых носителях.

 

А чуть ниже будет описана система команд самбы. Там также все однозначно указано.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...