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

 
 
> Отладка flash-проекта с помощью AT91SAM7S-EK (SAM7S64), Может можно как-нибудь иначе? Кто как пользуется отладкой во flash?
Master
сообщение Dec 27 2005, 16:54
Сообщение #1


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

Группа: Новичок
Сообщений: 170
Регистрация: 26-05-05
Из: Москва
Пользователь №: 5 405



Большой привет!

Я отлаживаю код во flash в IAR v4.30a с помощью платы из AT91SAM7S-EK.

Для того, чтобы перед каждым сеансом загрузки кода flash была чистой, мне пришлось впаять вместо штырей джампера JP28 кнопку (ERASE), а для функционирования кнопки RESET (BP5) - впаять резистор-перемычку R17.

Каждый раз перед загрузкой проекта я нажимаю сначала кнопку ERASE, затем кнопку RESET, затем вхожу в режим отладки.
Теоретически эту последовательность можно "загнать" в макрос. Если так, то КАК это сделать?

Далее, если мне нужно сбросить плату, не перепрошивая flash, опять же теоретически достаточно нажать кнопку (среды IAR-EW) Reset, однако на практике это приводит лишь к сбросу PC и очистке регистров. Возможно, что-то ещё очищается, но при запуске программа ведёт себя инчае, нежели чем при запуске после перезагрузки flash, в частности, не работает периферия, не генерятся прерывания, хотя код инициализации один.
Другими словами, для того, чтобы начать выполняться коду, необходимо выполнить перезагрузку flash.
Соответственно, вопрос: как настроить среду IAR EW 4.30a таким образом, чтобы по нажатию кнопки Reset процессор находился бы в таком же состоянии, как после процедуры стирания->сброса->загрузки flash ?

Спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 10)
vet
сообщение Dec 27 2005, 18:37
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



я прошиваю флэш простым нажатием Ctrl+D в IDE, без дополнительных действий. Плата та же, соединяюсь через J-Link, настройки проекта взяты из примеров, модель Debug_flash.


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
Master
сообщение Dec 28 2005, 09:45
Сообщение #3


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

Группа: Новичок
Сообщений: 170
Регистрация: 26-05-05
Из: Москва
Пользователь №: 5 405



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

Может настройки проекта неверные?
У меня такие:



Файл SAM7.mac имеет следующее содержание:
Код
// ---------------------------------------------------------
//   ATMEL Microcontroller Software Support  -  ROUSSET  -
// ---------------------------------------------------------
// The software is delivered "AS IS" without warranty or
// condition of any  kind, either express, implied or
// statutory. This includes without limitation any warranty
// or condition with respect to merchantability or fitness
// for any particular purpose, or against the infringements of
// intellectual property rights of others.
// ---------------------------------------------------------
//  File: SAM7.mac
//
//  1.0 08/Mar/04 JPP    : Creation
//  1.1 23/Mar/05 JPP    : Change Variable name
//
//  $Revision: 1.4 $
//
// ---------------------------------------------------------

__var __mac_i;
__var __mac_pt;

execUserReset()
{
CheckRemap();
ini();
AIC();
     __message "-------------------------------Set Reset ----------------------------------------";  
     __writeMemory32(0x00000000,0xB4,"Register");
}


//-----------------------------------------------------------------------------
// Watchdog
//-------------------------------
// Normally, the Watchdog is enable at the reset for load it's preferable to
// Disable.
//-----------------------------------------------------------------------------
Watchdog()
{
//* Watchdog Disable
//      AT91C_BASE_WDTC->WDTC_WDMR= AT91C_WDTC_WDDIS;
   __writeMemory32(0x00008000,0xFFFFFD44,"Memory");
   __message "------------------------------- Watchdog Disable ----------------------------------------";  
}


//-----------------------------------------------------------------------------
// Check Remap
//-------------
//-----------------------------------------------------------------------------
CheckRemap()
{
//* Read the value at 0x0
    __mac_i =__readMemory32(0x00000000,"Memory");
    __mac_i =__mac_i+1;
    __writeMemory32(__mac_i,0x00,"Memory");
    __mac_pt =__readMemory32(0x00000000,"Memory");
    
if (__mac_i == __mac_pt)  
{
   __message "------------------------------- The Remap is done ----------------------------------------";  
//*   Toggel RESET The remap
    __writeMemory32(0x00000001,0xFFFFFF00,"Memory");
  
} else {  
   __message "------------------------------- The Remap is NOT -----------------------------------------";  
}

}


execUserSetup()
{
ini();
     __message "-------------------------------Set PC ----------------------------------------";  
     __writeMemory32(0x00000000,0xB4,"Register");
}

//-----------------------------------------------------------------------------
// Reset the Interrupt Controller
//-------------------------------
// Normally, the code is executed only if a reset has been actually performed.
// So, the AIC initialization resumes at setting up the default vectors.
//-----------------------------------------------------------------------------
AIC()
{
// Mask All interrupt pAic->AIC_IDCR = 0xFFFFFFFF;
    __writeMemory32(0xffffffff,0xFFFFF124,"Memory");
    __writeMemory32(0xffffffff,0xFFFFF128,"Memory");
// disable peripheral clock  Peripheral Clock Disable Register
    __writeMemory32(0xffffffff,0xFFFFFC14,"Memory");

// #define AT91C_TC0_SR    ((AT91_REG *)     0xFFFA0020) // (TC0) Status Register
// #define AT91C_TC1_SR    ((AT91_REG *)     0xFFFA0060) // (TC1) Status Register
// #define AT91C_TC2_SR    ((AT91_REG *)     0xFFFA00A0) // (TC2) Status Register
    __readMemory32(0xFFFA0020,"Memory");
    __readMemory32(0xFFFA0060,"Memory");
    __readMemory32(0xFFFA00A0,"Memory");
    for (__mac_i=0;__mac_i < 8; __mac_i++)
    {
      // AT91C_BASE_AIC->AIC_EOICR
      __mac_pt  =  __readMemory32(0xFFFFF130,"Memory");
    
    }
   __message "------------------------------- AIC 2 INIT ---------------------------------------------";  
}

ini()
{
__writeMemory32(0x0,0x00,"Register");
__writeMemory32(0x0,0x04,"Register");
__writeMemory32(0x0,0x08,"Register");
__writeMemory32(0x0,0x0C,"Register");
__writeMemory32(0x0,0x10,"Register");
__writeMemory32(0x0,0x14,"Register");
__writeMemory32(0x0,0x18,"Register");
__writeMemory32(0x0,0x1C,"Register");
__writeMemory32(0x0,0x20,"Register");
__writeMemory32(0x0,0x24,"Register");
__writeMemory32(0x0,0x28,"Register");
__writeMemory32(0x0,0x2C,"Register");
__writeMemory32(0x0,0x30,"Register");
__writeMemory32(0x0,0x34,"Register");
__writeMemory32(0x0,0x38,"Register");

// Set CPSR
__writeMemory32(0x0D3,0x98,"Register");


}

RG()
{

__mac_i =__readMemory32(0x00,"Register");   __message "R00 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x04,"Register");   __message "R01 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x08,"Register");   __message "R02 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x0C,"Register");   __message "R03 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x10,"Register");   __message "R04 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x14,"Register");   __message "R05 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x18,"Register");   __message "R06 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x1C,"Register");   __message "R07 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x20,"Register");   __message "R08 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x24,"Register");   __message "R09 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x28,"Register");   __message "R10 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x2C,"Register");   __message "R11 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x30,"Register");   __message "R12 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x34,"Register");   __message "R13 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x38,"Register");   __message "R14 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x3C,"Register");   __message "R13 SVC 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x40,"Register");   __message "R14 SVC 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x44,"Register");   __message "R13 ABT 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x48,"Register");   __message "R14 ABT 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x4C,"Register");   __message "R13 UND 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x50,"Register");   __message "R14 UND 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x54,"Register");   __message "R13 IRQ 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x58,"Register");   __message "R14 IRQ 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x5C,"Register");   __message "R08 FIQ 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x60,"Register");   __message "R09 FIQ 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x64,"Register");   __message "R10 FIQ 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x68,"Register");   __message "R11 FIQ 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x6C,"Register");   __message "R12 FIQ 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x70,"Register");   __message "R13 FIQ 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x74,"Register");   __message "R14 FIQ0x",__mac_i:%X;
__mac_i =__readMemory32(0x98,"Register");   __message "CPSR     ",__mac_i:%X;
__mac_i =__readMemory32(0x94,"Register");   __message "SPSR     ",__mac_i:%X;
__mac_i =__readMemory32(0x9C,"Register");   __message "SPSR ABT ",__mac_i:%X;
__mac_i =__readMemory32(0xA0,"Register");   __message "SPSR ABT ",__mac_i:%X;
__mac_i =__readMemory32(0xA4,"Register");   __message "SPSR UND ",__mac_i:%X;
__mac_i =__readMemory32(0xA8,"Register");   __message "SPSR IRQ ",__mac_i:%X;
__mac_i =__readMemory32(0xAC,"Register");   __message "SPSR FIQ ",__mac_i:%X;

__mac_i =__readMemory32(0xB4,"Register");   __message "PC 0x",__mac_i:%X;  

}


И опять же не понятно, почему неадекватно поведение кнопки Reset в среде IAR EW...

P.S. Отдельное спасибо создателям данного форума - пользоваться одно удовольствие.
Go to the top of the page
 
+Quote Post
vet
сообщение Dec 28 2005, 11:59
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



Приложенные картинки не видны, поэтому сказать что-то относительно настроек не могу.
Прикрепляю файлы настроек рабочего проекта, сравните со своими.
Прикрепленные файлы
Прикрепленный файл  basic.rar ( 3.88 килобайт ) Кол-во скачиваний: 65
 


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
Master
сообщение Dec 28 2005, 16:01
Сообщение #5


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

Группа: Новичок
Сообщений: 170
Регистрация: 26-05-05
Из: Москва
Пользователь №: 5 405



Чтобы увидеть картинки, надо либо немного подождать, либо обновить их после загрузки всей страницы - Narod.ru иногда подтормаживает.

Касательно загрузки и отладки я нашёл только три разницы:


Попробовал сделать так же, эффект - 0. Всё по прежнему: без стирания flash кнопкой ERASE отладчик не доходит до main.
Причём прерывание, в котором отладчик оказывается - System Interrupt (SYSIRQ, ID=1).
Кнопка среды Reset ведёт себя так же.
Похоже, дело не в бобине cranky.gif
Go to the top of the page
 
+Quote Post
vet
сообщение Dec 28 2005, 16:54
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



У картинок странный адрес; впрочем, посмотрел их в отдельном окне.

Цитата
Похоже, дело не в бобине cranky.gif

Дело и в этом тоже (рис. 1 предыдущего поста). Ещё посмотрите xcl на предмет диапазона флэш-памяти и векторов. Я завёл проект, выставив такие значения:

Код
-DROMSTART=00100000
-DROMEND=0010FFFF
-Z(CODE)INTVEC=00100000-0010003F


А вообще, конечно, пришлось повозиться, пока подобрал рабочие настройки unsure.gif


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
Master
сообщение Dec 28 2005, 17:02
Сообщение #7


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

Группа: Новичок
Сообщений: 170
Регистрация: 26-05-05
Из: Москва
Пользователь №: 5 405



Цитата(vet @ Dec 27 2005, 21:37) *
я прошиваю флэш простым нажатием Ctrl+D в IDE, без дополнительных действий. Плата та же, соединяюсь через J-Link, настройки проекта взяты из примеров, модель Debug_flash.

Я вот чего не увидел, А ГДЕ В ВАШЕМ СООБЩЕНИИ НАПИСАНО, ЧТО ТАК МОЖНО ОТЛАЖИВАТЬСЯ ВО FLASH??!!

Если отлаживаться в ОЗУ, то заморочек со стиранием flash не существует, а вот при отладке кода во flash...
Я подчёркиваю, при отладке! а не при однократной загрузке и запуске кода.
Go to the top of the page
 
+Quote Post
vet
сообщение Dec 28 2005, 17:05
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



Цитата(Master @ Dec 28 2005, 20:02) *
Цитата(vet @ Dec 27 2005, 21:37) *

я прошиваю флэш простым нажатием Ctrl+D в IDE, без дополнительных действий. Плата та же, соединяюсь через J-Link, настройки проекта взяты из примеров, модель Debug_flash.

Я вот чего не увидел, А ГДЕ В ВАШЕМ СООБЩЕНИИ НАПИСАНО, ЧТО ТАК МОЖНО ОТЛАЖИВАТЬСЯ ВО FLASH??!!

Если отлаживаться в ОЗУ, то заморочек со стиранием flash не существует, а вот при отладке кода во flash...
Я подчёркиваю, при отладке! а не при однократной загрузке и запуске кода.


Разумеется, отлаживаюсь - загрузить и самбой можно, стоило ли пользовать тогда J-Link wink.gif


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
Master
сообщение Dec 28 2005, 17:18
Сообщение #9


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

Группа: Новичок
Сообщений: 170
Регистрация: 26-05-05
Из: Москва
Пользователь №: 5 405



Цитата(vet @ Dec 28 2005, 19:54) *
Дело и в этом тоже (рис. 1 предыдущего поста). Ещё посмотрите xcl на предмет диапазона флэш-памяти и векторов. Я завёл проект, выставив такие значения:
Код
-DROMSTART=00100000
-DROMEND=0010FFFF
-Z(CODE)INTVEC=00100000-0010003F

Я не совсем понимаю смысл в данном дополнительном определении расположения flash-памяти в адресном пространстве...
Вот цитата из документа doc6175.pdf, страница 18:
Цитата
The AT91SAM7S256/128/64/321/32 features one bank of 256/128/64/32/32 Kbytes of Flash.
At any time, the Flash is mapped to address 0x0010 0000. It is also accessible at address 0x0
after the reset and before the Remap Command.

Переопределения (Remap Command) мы с Вами не делаем, соответственно, зачем дополнительно прописывать, где лежит flash?
А самое главное, как это влияет на процесс отладки в данном случае?

Сообщение отредактировал Master - Dec 28 2005, 17:20
Go to the top of the page
 
+Quote Post
vet
сообщение Dec 28 2005, 17:26
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



Цитата(Master @ Dec 28 2005, 20:18) *
Я не совсем понимаю смысл в данном дополнительном определении расположения flash-памяти в адресном пространстве...
Вот цитата из документа doc6175.pdf, страница 18:
Цитата
The AT91SAM7S256/128/64/321/32 features one bank of 256/128/64/32/32 Kbytes of Flash.
At any time, the Flash is mapped to address 0x0010 0000. It is also accessible at address 0x0
after the reset and before the Remap Command.

Переопределения (Remap Command) мы с Вами не делаем, соответственно, зачем дополнительно прописывать, где лежит flash?
А самое главное, как это влияет на процесс отладки в данном случае?

Подобрано методом проб и ошибок. Из перепробованных комбинаций настроек заработала именно эта. Другие - не работали, либо работали неверно. Про ремап - в курсе, тем не менее...


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
ANT
сообщение Mar 5 2006, 19:44
Сообщение #11


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

Группа: Свой
Сообщений: 187
Регистрация: 22-06-04
Пользователь №: 127



Цитата
.......... Я завёл проект, выставив такие значения:
Код
-DROMSTART=00100000
-DROMEND=0010FFFF
-Z(CODE)INTVEC=00100000-0010003F

Действительно, помогло. А на сайте IAR нашёл ещё один вариант, который тоже работает:
В файле at91SAM7S64_Remap.xcl после строчки
Код
-Z(CODE)INTVEC=00-3F

нужно вставить
Код
-QINTVEC=MOVED_INTVEC  
-Z(CODE)MOVED_INTVEC=ROMSTART-ROMEND

В принципе, почти то же самое, только вместо одной строки - три.
Вот ссылка:
Using the Atmel remap feature together with IAR EWARM
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 23rd June 2025 - 16:50
Рейтинг@Mail.ru


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