radistka 0 15 ноября, 2010 Опубликовано 15 ноября, 2010 · Жалоба возвращаясь к первому сообщению, кто-нибудь может объяснить толково как правильно залить программу в Dataflash чтобы она потом запустилась из внешней SDRAM? 1. если использую flashloader, то программа как-будто пишется, но не стартует при подаче питания - SDRAM что ли не инициализировалась....не понятно 2. написала загрузчик, который с нужного адреса Dataflash копирует программу в SDRAM и перехожу на начало программы в SDRAM - без прерываний работают простенькие проги, с прерываниями - нет. В чем подвох может быть? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DpInRock 0 15 ноября, 2010 Опубликовано 15 ноября, 2010 · Жалоба 1. Главу Boot Program пересказывать не имеет смысла. Ее надо читать. 2. Вектора находятся в SRAM Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zelepuk 0 15 ноября, 2010 Опубликовано 15 ноября, 2010 (изменено) · Жалоба Сложновато-сложновато, всё равно(( Например подёргать ногами на AVR можно просто (напримере IAR) DDRC = 255; PORTC = 255; сколько не искал подобные констркукции для ARM... не нашёл(( Как осуществляется доступ к PA0... PA31, PB0... PB31 и т.д. (здаётся мне их настроить их на вывод тоже непрсото - одной строчкой необойтись) P.S. Наверное нужно и впрям запастись мешком семечек и курить даташит.... Изменено 15 ноября, 2010 пользователем Zelepuk Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
radistka 0 15 ноября, 2010 Опубликовано 15 ноября, 2010 · Жалоба Boot Program читан, FlashLoaderGuide перечитан, все легко и просто - прописал путь до загрузчика, подцепил mac файл, где инициализируется SDRAM и все должно работать... Но ведь не работает! В надежде, что не я первая стою на этих граблях, надеюсь на помощь ) Что касается векторов прерываний, то они как были в SRAM, так и лежат там себе... Первое прерывание (работаю с touch screen) обрабатывается, но из него не выходит программа, то есть прерывание не сбрасывается? но при загрузке проги напрямую в SDRAM обработка прерываний идет нормально Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zelepuk 0 15 ноября, 2010 Опубликовано 15 ноября, 2010 · Жалоба Boot Program читан, FlashLoaderGuide перечитан, все легко и просто - прописал путь до загрузчика, подцепил mac файл, где инициализируется SDRAM и все должно работать... Но ведь не работает! В надежде, что не я первая стою на этих граблях, надеюсь на помощь ) Что касается векторов прерываний, то они как были в SRAM, так и лежат там себе... Первое прерывание (работаю с touch screen) обрабатывается, но из него не выходит программа, то есть прерывание не сбрасывается? но при загрузке проги напрямую в SDRAM обработка прерываний идет нормально присоединяюсь... только про mac-файл бы узнать подробнее) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DpInRock 0 15 ноября, 2010 Опубликовано 15 ноября, 2010 (изменено) · Жалоба Если читан и перечитан, то какие могут быть "вроде"? Научитесь для начала в SRAM программы запускать. Потом, если надо будет SDRAM - Программа из датафлэш грузится в SRAM, переписывает настоящую программу, написанную и откомпилированную для SDRAM (предварительно инициализировав оную). Переписывает вектора прерываний на нужное место (на самом деле проще всего всунуть в стартап команду выборки прямо из AIC адреса - тогда вектора подойдут от отстатков загузчика) . После чего уже джамп на начало SDRAM. Естественно, никакой инициализации SDRAM после этого. И вообще - никакой инициализации. Все - в первоначальном загрузчике делать. --- По жизни вот так делать. 1. Пишем программы для SRAM и тренируемся их запускать. 2. Компилируем программу для SDRAM и с помощью одной из уже написанный программок засовываем ея в датафлэш куда-нибудь в серединку. 3. После чего грузим в SDRAM программку, которая токо и умеет, что инициализировать PLL+SDRAM? копировать программу из п.2 в SDRAM и запускать оную 4. После удачи, программку из пункта 3 обзываем загрузчиком и запихиваем ее в датафлэш уже с нулевого адреса. Все. Изменено 15 ноября, 2010 пользователем DpInRock Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrewlekar 0 16 ноября, 2010 Опубликовано 16 ноября, 2010 · Жалоба В пункте 3 следует читать: 3. После чего грузим в SRAM программку... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
radistka 0 16 ноября, 2010 Опубликовано 16 ноября, 2010 · Жалоба ну черт знает, так и делаю, но когда в 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 в стартап? как совать? ) заранее благодарю! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DpInRock 0 16 ноября, 2010 Опубликовано 16 ноября, 2010 (изменено) · Жалоба Кэт, программка может виснуть по сотне причин. Тут уже вступает в силу такое правило: посмотрите стартап файл и разберитесь - а за каким чертом он нужен. ldr PC, [PC,# -0xF20] ;AIC direct Вот такая строчка должна быть для IRQ вектора. (ОНа может быть и другая, но вот такая - будет работать с SDRAM без дополнительных телодвижений) (Это кстати подробнейшим образом описывается в разделе про аик в даташите.) (В этом случае вы оформляете прерывание как __arm __irq и его адрес пишете напрямую в аик -- Процедура обработки будет вызываться сразу, минуя все промежуточные этапы, которые любят использовать в примерах). Далее. Для работы просто необходимо сделать общение с компом по 232. Изменено 16 ноября, 2010 пользователем DpInRock Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 42 16 ноября, 2010 Опубликовано 16 ноября, 2010 · Жалоба (В этом случае вы оформляете прерывание как __arm __irq и его адрес пишете напрямую в аик -- Процедура обработки будет вызываться сразу, минуя все промежуточные этапы, которые любят использовать в примерах). В примерах это делается для организации вложенных прерываний. Если вложенность не требуется, то тогда как вы говорите реакция на прерывание действительно будет быстрее. Блин, почему книжки никто не читает. Тревор Мартин не плохо все это описывает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DpInRock 0 16 ноября, 2010 Опубликовано 16 ноября, 2010 · Жалоба В примерах это делается для организации вложенных прерываний Вовсе нет. Организация вложенности делается совершенно по-другому. Хуже того, насколько я помню, в примерах вложенные прерывания нигде не применяются. Для вложенности требуется во первых разрешать прерывания изнутри обработчика. Это как минимум. (Я не говорю о манипуляциях с аик (просто точно не помню, а лезть неохота). А для этого применяют волшебное слово __nested Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sergeeff 1 16 ноября, 2010 Опубликовано 16 ноября, 2010 · Жалоба ну черт знает, так и делаю, но когда в SDRAMном проекте есть прерывания, программа зависает. А так - я тоже домозговала до этих 4 пунктов Надеюсь вы не забыли сделать remap памяти, чтобы ваша sram читалась/писалась с нулевого адреса? А потом уже туда копировать таблицу векторов прерываний. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DpInRock 0 16 ноября, 2010 Опубликовано 16 ноября, 2010 · Жалоба Вообще, лучше проверять местонахождение программы и выполнять или не выполнять ремап. Ибо при загрузке из флэша ремап выполняется автоматически. А вот при старте кода самбой о ремапе должна думать программа. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sergeeff 1 17 ноября, 2010 Опубликовано 17 ноября, 2010 · Жалоба Ибо при загрузке из флэша ремап выполняется автоматически. А вот при старте кода самбой о ремапе должна думать программа. При загрузке какой программы? Чего там происходит автоматически? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DpInRock 0 17 ноября, 2010 Опубликовано 17 ноября, 2010 · Жалоба Прочитайте раздел даташита о последовательности действий загрузчика при поиске программ на допустимых носителях. А чуть ниже будет описана система команд самбы. Там также все однозначно указано. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться