ATmega8A прерывание

Обсуждаем контроллеры компании Atmel.
Ответить
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1337
Зарегистрирован: Сб июн 09, 2012 02:14:11
Откуда: ХАРЬКОВ

Сообщение СЦБист »

Столкнулся со следующей проблемой.

Я настраиваю внешнее прерывание по INT1.

При изменении сигнала на входе INT1 по фронту вызывается подпрограмма обработчика прерывания
EXT_INT1:
Потом программа начинает выполнятся с метки RESET (начало программы), после окончания обработчика прерывания.

Как сделать так, чтобы программа продолжала выполнятся после окончания выполнения прерывания, с момента его вызова.


**********************************************************


.include "m8Adef.inc"

.cseg
.org 0

rjmp RESET ; Reset Handler
rjmp EXT_INT0 ; IRQ0 Handler
rjmp EXT_INT1 ; IRQ1 Handler
rjmp TIM2_COMP ; Timer2 Compare Handler
rjmp TIM2_OVF ; Timer2 Overflow Handler
rjmp TIM1_CAPT ; Timer1 Capture Handler
rjmp TIM1_COMPA ; Timer1 CompareA Handler
rjmp TIM1_COMPB ; Timer1 CompareB Handler
rjmp TIM1_OVF ; Timer1 Overflow Handler
rjmp TIM0_OVF ; Timer0 Overflow Handler
rjmp SPI_STC ; SPI Transfer Complete Handler
rjmp USART_RXC ; USART RX Complete Handler
rjmp USART_UDRE ; UDR Empty Handler
rjmp USART_TXC ; USART TX Complete Handler
rjmp AD ; ADC Conversion Complete Handler
rjmp EE_RDY ; EEPROM Ready Handler
rjmp ANA_COMP ; Analog Comparator Handler
rjmp TWSI ; Two-wire Serial Interface Handler
rjmp SPM_RDY ; Store Program Memory Ready Handler



;RESET:
EXT_INT0:
; EXT_INT1:
TIM2_COMP:
TIM2_OVF:
TIM1_CAPT:
TIM1_COMPA:
TIM1_COMPB:
TIM1_OVF:
TIM0_OVF:
SPI_STC:
USART_RXC:
USART_UDRE:
USART_TXC:
AD:
EE_RDY:
ANA_COMP:
TWSI:
SPM_RDY:

reti



RESET:
ldi R16,0b00001100
out MCUCR,R16

ldi R16,0b10000000
out GICR,R16

ldi R16,0

sei



Main1:
nop
rjmp Main1


EXT_INT1: inc R16
out PORTB,R16
reti
Реклама
Мудрый кот
Аватара пользователя
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Сообщение Kavka »

Инициализировать указатель стека.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Реклама
Друг Кота
Аватара пользователя
Сообщения: 15607
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Ну и накручено..! :cry:
Тут без пол-литры валерианки сложновато, да и не объяснять, а заново учить надобно... :facepalm:
Кстати, указатель стека в большинстве AVRок автоматически "по умолчанию" инициализируется на RAMEND для данной модели... Была б у топикстартера "личка" или e-mail - можно трафарет-заготовку хоть на tiny2313/mega8515 или mega162 скинуть (8-й мегой не балуюсь) :tea:
Ладушки... Скушаньки для начала вот это:
набросок с бодуна.txt
(3.63 КБ) 192 скачивания
Последний раз редактировалось BOB51 Вс дек 30, 2012 18:24:28, всего редактировалось 1 раз.
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

Что-то мешает сюда кинуть?
Docendo discimus
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1518
Зарегистрирован: Пт дек 28, 2012 21:56:46
Откуда: St. Petersburg

Сообщение blackx »

Добавьте это в начало.

Код: Выделить всё

.CSEG

ldi R16,Low(RAMEND)	; stack init
out SPL,R16		
 
ldi R16,High(RAMEND)
out SPH,R16
Изображение only pure true norwegian blackx Изображение
Реклама
Друг Кота
Аватара пользователя
Сообщения: 15607
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

уже бодунутый вариант кинул (правкой к предыдущему посту):facepalm:
Реклама
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1337
Зарегистрирован: Сб июн 09, 2012 02:14:11
Откуда: ХАРЬКОВ

Сообщение СЦБист »

blackx большое спасибо! Заработало :shock: .


************************************************************

.include "m8Adef.inc"

.CSEG

.org 0

rjmp RESET ; Reset Handler
rjmp EXT_INT0 ; IRQ0 Handler
rjmp EXT_INT1 ; IRQ1 Handler
rjmp TIM2_COMP ; Timer2 Compare Handler
rjmp TIM2_OVF ; Timer2 Overflow Handler
rjmp TIM1_CAPT ; Timer1 Capture Handler
rjmp TIM1_COMPA ; Timer1 CompareA Handler
rjmp TIM1_COMPB ; Timer1 CompareB Handler
rjmp TIM1_OVF ; Timer1 Overflow Handler
rjmp TIM0_OVF ; Timer0 Overflow Handler
rjmp SPI_STC ; SPI Transfer Complete Handler
rjmp USART_RXC ; USART RX Complete Handler
rjmp USART_UDRE ; UDR Empty Handler
rjmp USART_TXC ; USART TX Complete Handler
rjmp AD ; ADC Conversion Complete Handler
rjmp EE_RDY ; EEPROM Ready Handler
rjmp ANA_COMP ; Analog Comparator Handler
rjmp TWSI ; Two-wire Serial Interface Handler
rjmp SPM_RDY ; Store Program Memory Ready Handler



;RESET:
EXT_INT0:
; EXT_INT1:
TIM2_COMP:
TIM2_OVF:
TIM1_CAPT:
TIM1_COMPA:
TIM1_COMPB:
TIM1_OVF:
TIM0_OVF:
SPI_STC:
USART_RXC:
USART_UDRE:
USART_TXC:
AD:
EE_RDY:
ANA_COMP:
TWSI:
SPM_RDY:

reti



RESET:


ldi R16,Low(RAMEND) ;èíèöèàëèçàöèÿ ñòåêà
out SPL,R16

ldi R16,High(RAMEND) ;èíèöèàëèçàöèÿ ñòåêà
out SPH,R16

ldi R16,0b00001100
out MCUCR,R16

ldi R16,0b10000000
out GICR,R16

ldi R16,0

sei



Main1:
nop
rjmp Main1


EXT_INT1: inc R16
out PORTB,R16
reti
Родился
Сообщения: 11
Зарегистрирован: Сб мар 16, 2013 07:31:37

Сообщение UA4WAT »

А можно ли заместо неиспользуемых прерываний которые указаны вставить nop пустую команду !
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

Можно, только осторожно, иначе при не совсем грамотном написании программы (случайно разрешить прерывание без обработчика) можно словить веселый глюк, типа беспричинного выполнения прерывания или вообще сброса. Так что уж лучше ставить туда RETI, или как написано выше - RJMPы на (пустой) обработчик неиспользуемых прерываний.
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

Тема насчет случайных прерываний уже обсуждалась в теме вроде WinAVR.Вообще нежелательно чтобы ненужные прерывания происходили, так как это может сильно тормозить выполнение нужного кода. И в этой IDE предусмотрен как раз таки сброс в случае неправильно разрешенного прерывания.
Контактная информация:
Ответить

Вернуться в «AVR»