[an error occurred while processing this directive]
Помогите разобраться: симулятор AVRStudio (+++)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено PILOTIK 15 октября 2002 г. 14:22

From: "Alexander Golovlev"

Доброе время суток, Ол! ' '

Предмет обсуждения:
Программный симулятор ATmega128 (без STKшек и пр.)

Куски кода:
Использую следующие прерывания:
;--------------------------------------------------------------------------
.cseg
.org $0
Jmp INIT; Инициализация
.org OVF2addr
Jmp T2Ovf; Переполнение таймера2
.org ICP1addr
Jmp MotorImp; Пришел импульс от двигателя
.org OVF1addr
Jmp T1Full; Переполнение таймера1
.org OVF0addr
Jmp T0Ovf; Переполнение таймера0
.org PMBegin
---------------------------------------------------------------------------

Основной цикл пока пустой, т.е.:
---------------------------------------------------------------------------
MAIN: RJmp MAIN;
---------------------------------------------------------------------------

Инициализация такая:
---------------------------------------------------------------------------
INIT: LdI Acc,high(Stack);
Out SPH,Acc; Инициализация стека
LdI Acc,low(Stack)
Out SPL,Acc;
ClT;
LdI Acc,_TCCR1B;
Out TCCR1B,Acc; Включаем таймер1
LdI Acc,T0Init;
Out TCCR0,Acc; Включаем таймер0
LdI Acc,_TIMSK;
Out TIMSK,Acc; Разрешаем прерывания по переполнению
LdI Acc,_TCCR2;
Out TCCR2,Acc; Включаем таймер2
LdI Acc,(1< Out GIMSK,Acc; Разрешаем внешние прерывания
SeI;
----------------------------------------------------------------------------

Где константы следующие:
----------------------------------------------------------------------------
.Equ T0Init = (1< .Equ _TIMSK = (1<; Переполн0 InputCapt Переполн1 Переполн2
.Equ _TCCR1A = 0;
.Equ _TCCR1B = (1<; RisingEdge NoiseCancel CkSel
.Equ _TCCR2 = (1< .Equ Stack = RAMEnd-1;
----------------------------------------------------------------------------

Теперь что происходит (суть вопроса):
Естественно код помимо этого есть, он весь в прерываниях, пустой цикл я
заполню потом, но вот что происходит в режиме симуляции. Сначала, как и
должно быть, прыгаем на INIT, даже проходим его благополучно, но как только
выходим в основной цикл происходит вызов прерывания OVF2addr. После его
выполнения, оно опять вызывается снова и снова. До бесконечности. Затем я
убрал вообще инициализацию TIMER2. HИЧЕГО HЕ ИЗМЕHИЛОСЬ!
Единственное что останавливает бессмысленные вызовы это Cli(вместо Sei), но
на фига мне тогда эта программа.
Программа сама по себе (в контроллер загруженная) работает. Hо кто знает,
может и раз из ста (или через раз) в контроллере и происходит подобный сбой.
Короче, вопрос:
Я понимаю что не всем охота в АСМе ковыряться, но тут не так уж и много, и с
комментариями. Помогите разобраться (копаюсь больно долго), подскажите,
может кто уже решал подобное. А может кто подскажет другую систему отладки
кроме AVR Studio для серии AVR? Я слышал что есть IAR Embedded WorkBench, но
стоит ли она того, чтобы за ней бегать и есть ли в ней симулятор AVR ?(С
удовольствием бы отказался от AVRStudio, если бы были альтернативы с теми же
возможностями)
Одни вопросы, млин.

СУВ
Alexander Golovlev. MailTo: alex-gol1@mtu-net.ru

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru