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

 
 
> sam9260 отладка в SRAM -> SDRAM
Goofy
сообщение Mar 10 2009, 13:13
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 169
Регистрация: 17-09-07
Из: Красноярск
Пользователь №: 30 600



Первый опыт программирования указанного процессора

Пользуюсь платой от стартеркита (http://starterkit.ru/new/index.php?name=Pages&op=page&pid=15, по факту впаян sam9260)
Стер с него линукс. Ставиться задача отлаживать одинокий софт максимально удобно, т.е. загрузкой JTAGом в SDRAM.
Среда Keil, отладчик JetLink5.

Рассуждения сейчас неполные, но изложу что есть:

Чтобы грузить приложение JTAGом в SDRAM требуется его инициализировать, например из датафлэша.
После загружаем образ JTAGом из кейла, при этом процессор все ещё будет бегать в инициализаторе из int.RAM (в финальном устройстве он разумеется будет передавать управление сам, а сейчас ему просто нечего грузить). Сейчас для передачи управления ничего умнее прописывания в PC адреса не вижу. ( лучше из командной строки дебагера при старте? сходу не получилось )

Как поступать с ремапом? Инициализатор запустился с нулевого адреса, всё ок. Основная программа вышеуказанным способом с "нуля" не запустится, придётся линковать при отладке по месту.

Как малой кровью построить отладку описанным халявным образом?
Что в изучении процессора на этом этапе упустил?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 6)
Goofy
сообщение Mar 11 2009, 19:39
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 169
Регистрация: 17-09-07
Из: Красноярск
Пользователь №: 30 600



Все молчат либо когда все плохо изложено, либо когда реально никто не сталкивался.
В последнем сомневаюсь smile.gif


поступим иначе
Отлаживать кейлом через JTAG из SDRAM софт на at91sam9260 возможно ? smile.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 11 2009, 20:05
Сообщение #3


Гуру
******

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



Цитата(Goofy @ Mar 11 2009, 22:39) *
Отлаживать кейлом через JTAG из SDRAM софт на at91sam9260 возможно ? smile.gif

Возможно. Только инициализировать SDRAM логичнее самим отладчиком, а не дополнительным загрузчиком.
Проблем с ремапом и передачей управления вообще не вижу.
Go to the top of the page
 
+Quote Post
zuy
сообщение Mar 11 2009, 23:53
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 173
Регистрация: 30-11-05
Из: San Francisco
Пользователь №: 11 593



Цитата(Goofy @ Mar 11 2009, 22:39) *
Отлаживать кейлом через JTAG из SDRAM софт на at91sam9260 возможно ? smile.gif


Сам только собираюсь начать пробовать работать с AT91SAM9260,
но насколько я понимаю этот процесс выглядит примерно так:
1. Собираем проект по адресу в SDRAM. Например начало 0x20000000
2. Пишем скрипт для KEIL, который он исполняет до начала отладки.
в этом скрипте инициализируем все что нужно( PLL, SDRAM ...), загружаем код в контроллер и даем команду на исполнение.

Пример этого, вместе со скриптами, можно найти в наборе софта для отладочной платы атмела с их сайта.
Там очень много примеров для работы с разной переферией и из разных сред.
Go to the top of the page
 
+Quote Post
Goofy
сообщение Mar 29 2009, 13:09
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 169
Регистрация: 17-09-07
Из: Красноярск
Пользователь №: 30 600



Переделал демо скрипт кейла под свою конфигурацию:

Код
FUNC void Setup (void) {

  _WDWORD(0xFFFFF804, 0xFFFF0000);      // PIOC_PDR: Enable Peripheral Mode  

  _WDWORD(0xFFFFEF1C, 0x00010002);      // EBI_CSA:  CSA1 support for SDRAM

  _WDWORD(0xFFFFEA08, 0x852372F9);      // Init SDRAM
  _sleep_(10);                          // Wait for 10 ms
  _WDWORD(0xFFFFEA00, 0x00000002);
  _WDWORD(0x20000000, 0x00000000);
  _sleep_(10);                          // Wait for 10 ms
  _WDWORD(0xFFFFEA00, 0x00000004);
  _WDWORD(0x20000004, 0x00000001);
  _WDWORD(0xFFFFEA00, 0x00000004);
  _WDWORD(0x20000008, 0x00000002);
  _WDWORD(0xFFFFEA00, 0x00000004);
  _WDWORD(0x2000000C, 0x00000003);
  _WDWORD(0xFFFFEA00, 0x00000004);
  _WDWORD(0x20000010, 0x00000004);
  _WDWORD(0xFFFFEA00, 0x00000004);
  _WDWORD(0x20000014, 0x00000005);
  _WDWORD(0xFFFFEA00, 0x00000004);
  _WDWORD(0x20000018, 0x00000006);
  _WDWORD(0xFFFFEA00, 0x00000004);
  _WDWORD(0x2000001C, 0x00000007);
  _WDWORD(0xFFFFEA00, 0x00000004);
  _WDWORD(0x20000020, 0x00000008);
  _WDWORD(0xFFFFEA00, 0x00000003);
  _WDWORD(0x20000024, 0xCAFEDEDE);

  _WDWORD(0xFFFFEA04, 0x000000BB);      // Refresh for SDRAM (at 18.432 MHz)

  _WDWORD(0xFFFFEA00, 0x00000000);
  _WDWORD(0x20000000, 0x00000000);

  // <o> Program Entry Point
  PC = 0x20000000;
}
    _sleep_(100);

// Switching from Slow Clock to Main Oscillator for faster Download
_WDWORD(0xFFFFFC20, 0x00000601);        // PMC_MOR:  Enable Main Oscillator
_sleep_(10);                            // Wait for stable Main Oscillator
_WDWORD(0xFFFFFC30, 0x00000001);        // PMC_MCKR: Switch to Main Oscillator

_WDWORD(0xFFFFFD44, 0x00008000);        // WDT_MR:   Disable Watchdog

Setup();                                // Init, and setup for Running

LOAD payload_controller.axf INCREMENTAL   // Download


Если компилировать голое while(1); в теле main ( размер образа программы ~1.5k ), то всё выполняется так как и должно.
Когда же компилирую (FreeRTOS, размер образа ~11k)
Код
    xTaskCreate(tskIdle, "Aux", 200, NULL, tskIDLE_PRIORITY + 1, NULL );
    xTaskCreate(tskTask1, "Comm", 200, NULL, tskIDLE_PRIORITY + 2, NULL );
    vTaskStartScheduler();

то выполнение до main() (и этих строчек соответственно ) даже не доходит, а обнаруживается в районе 0x00100000
При этом проходит инициализация переферии (асмовский конфигурационнй файл, что генерит кейл), передаётся управление к __main, далее подготовка кучи и стека (помоему)
и потом (однозначно из кода написанного не мной) , достоверно точку ухода проследить не удалось покапрограмма перескакивает налево в район 0x00100000



Собрано так:

Код
LR_IROM1 0x20000000 0x00010000  {  ; load region size_region
  ER_IROM1 0x20000000 0x00010000  {; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
  RW_IRAM1 0x20010000 0x00020000  {; RW data
   .ANY (+RW +ZI)
  }
}


На неправильную настройку клока и памяти не грешу (ведь минимальный код то всё - таки в SDRAM работает)

Чем может объясняться подобное поведение процессора ?
Go to the top of the page
 
+Quote Post
Goofy
сообщение Mar 30 2009, 03:47
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 169
Регистрация: 17-09-07
Из: Красноярск
Пользователь №: 30 600



Собираю с Use Micro-lib, выполнение до main доползает.
Желательно, однако, без micro-lib
Go to the top of the page
 
+Quote Post
Goofy
сообщение Mar 31 2009, 08:00
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 169
Регистрация: 17-09-07
Из: Красноярск
Пользователь №: 30 600



ситуация изменилась
и поставим вопрос иначе:

что может перед запуском int main (void) вызывать SWI ?
Go to the top of the page
 
+Quote Post

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

 


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


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