Приветствую. Подскажите пожалуйста.
Имеем ATmega32. программу в Асемблере, AVR Studio4.
Гоняем программу в симуляторе. Примерно через полсекунды происходит сброс Методом научного тыка определил, что виновна "собака", т.к. если запретить ее работу, то все фунциклирует. С другой стороны, если всю программу упростить, оставив только обработку прерываний от таймера, то разрешенный WDT опять все сбрасывает примерно через полсекунды (странно, ведь WDT настроен на 2,1 сек).. Не могу понять откуда просачивается сброс. - пререывание по таймеру 100 Гц.
timer1: push tmp1 push tmp2 in tmp1,SREG push tmp1
call timer1_set call wdt_set
pop tmp1 out SREG,tmp1 pop tmp2 pop tmp1
reti
- в прерывании вызываю подпрограмму перезагрузки таймера - вызываю подпрограмму сброса WDT и его инициализации ;=================================== timer1_set: ldi tmp1,0b00000100 ;TOIE =1 разрешение прерываний от таймера out TIMSK,tmp1
ldi tmp1,0x00 ;откл. таймера1 от выводов процессора out TCCR1A,tmp1
ldi tmp1,0b00000010 ;предделитель на 8 out TCCR1B,tmp1
ldi tmp1,tmr1h ;зарузка таймера out TCNT1H,tmp1 ldi tmp1,tmr1l out TCNT1L,tmp1 ret ;===================================
wdt_set:
wdr ;сброс внутреннего WDT
ldi tmp1,0b00011111 ;инициализация внутр. WDT, разрешение работы, период 2,1 сек при питании 5 Вольт. out wdtcr,tmp1
ret ;===================================
Подскажите пожалуйста, в чем еще может быть загвоздка?
|