Модераторы: PILOT, ManiaK, Mazzi
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Прерывания, Атмега8 
:(
    Опции темы
Alex1984
Дата 3.5.2006, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 299
Регистрация: 6.3.2005
Где: Киев

Репутация: 2
Всего: 2



Не могу запретить прерывания.
Может у МК глюк какой. Может у кого было такое? 
PM MAIL WWW ICQ   Вверх
Romikgy
Дата 3.5.2006, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 3
Всего: 146



Alex1984, а как запрещаешь , код покажи! 


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
PILOT
Дата 3.5.2006, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


производство
****


Профиль
Группа: Модератор
Сообщений: 2724
Регистрация: 4.4.2002
Где: москва

Репутация: 20
Всего: 54



CLI команда есть. 
Либо в регистре соотв. прерывания ставь запрет.

СУВ.
 


--------------------
тут могла быть Ваша реклама...
PM MAIL WWW ICQ   Вверх
Alex1984
Дата 3.5.2006, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 299
Регистрация: 6.3.2005
Где: Киев

Репутация: 2
Всего: 2



да знаю, не могу понять почему происходит так, входит в прерывание, запрещаю прерывание (и биты обнулял и CLI), но по выходу из прерывания опять начинается обработка. Обнулял биты в конце обработки прерывания, но все равно вход выполняеться снова.

Код

.include "m8def.inc"
.device ATmega8
;-------------------------------------------------------------------------
.DSEG
.def A=r16            ;
.def B=r17            ;
.def C=r18            ;
.def buf=r19

.def PauseCounter=r23
.equ Delay_segment=0x03    

.CSEG
rjmp begin
rjmp TEST0    ;$0001 
rjmp TEST1    ;$0002 
reti        ;$0003 
reti        ;$0004 
reti        ;$0005 
reti        ;$0006 
reti        ;$0007 
reti        ;$0008 
reti        ;$0009 
reti        ;$000a 
reti        ;$000b 
reti        ;$000c 
reti        ;$000d 
reti        ;$000e 
reti        ;$000f 
reti        ;$0010
reti        ;$0011
reti        ;$0012 
.org 200

BEGIN:

ldi buf,0x04
out SPH,buf
ldi buf,0x5f
out SPL,buf

sei                                
ldi buf,0xff                    
out ddrb,buf

ldi buf,0b00001011                
out MCUCR,buf                    
ldi buf,0b10000000
out GICR,buf                    

ldi buf,0x00                    
out portb,buf
END:                            
nop
nop
nop
rjmp END                        


TEST1:
cli
ldi buf,0xff
out portb,buf
ldi PauseCounter,Delay_segment
RCALL Pause ;while(PauseCounter!=0)
ldi buf,0x00
out portb,buf
reti 
PAUSE:
ldi buf,0x0                        ;
cp buf, PauseCounter            ; Compare registers 0x00 and PauseCounter
breq  Equal                 ; Branch if registers  equal
dec PauseCounter
nop 
nop
nop 
nop
nop 
rjmp PAUSE
Equal:
ret
 
PM MAIL WWW ICQ   Вверх
PILOT
Дата 4.5.2006, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


производство
****


Профиль
Группа: Модератор
Сообщений: 2724
Регистрация: 4.4.2002
Где: москва

Репутация: 20
Всего: 54



У меня все работает:
Код

.include "m8def.inc"
.device ATmega8
;-------------------------------------------------------------------------
.DSEG
.def A=r16            ;
.def B=r17            ;
.def C=r18            ;
.def buf=r19
.def PauseCounter=r23
.equ Delay_segment=0x03    
.CSEG
rjmp begin
rjmp TEST0    ;$0001 
rjmp TEST1    ;$0002 
reti        ;$0003 
reti        ;$0004 
reti        ;$0005 
reti        ;$0006 
reti        ;$0007 
reti        ;$0008 
reti        ;$0009 
reti        ;$000a 
reti        ;$000b 
reti        ;$000c 
reti        ;$000d 
reti        ;$000e 
reti        ;$000f 
reti        ;$0010
reti        ;$0011
reti        ;$0012 
.org 200
BEGIN:
ldi buf,0x04
out SPH,buf
ldi buf,0x5f
out SPL,buf
sei                                
ldi buf,0xff                    
out ddrb,buf
ldi buf,0b00001011                
out MCUCR,buf                    
           LdI        buf,0b11000000
           Out        GICR,buf                    
ldi buf,0x00                    
out portb,buf
END:                            
nop
nop
nop
rjmp END                        
;-----------------------------------------------------------------------------
TEST0:
           Push       buf
           In         buf,SREG
           Push       buf
           ;do something
           Pop        buf
           Out        SREG,buf
           Pop        buf
RetI;

;-----------------------------------------------------------------------------
TEST1:
           Push       buf
           In         buf,SREG
           Push       buf
          
           LdI        buf,0xff
           Out        portb,buf
           LdI        PauseCounter,Delay_segment
           RCall      Pause ;while(PauseCounter!=0)
           LdI        buf,0x00
           Out        portb,buf

           Pop        buf
           Out        SREG,buf
           Pop        buf
RetI 
PAUSE:
ldi buf,0x0                        ;
cp buf, PauseCounter            ; Compare registers 0x00 and PauseCounter
breq  Equal                 ; Branch if registers  equal
dec PauseCounter
nop 
nop
nop 
nop
nop 
rjmp PAUSE
Equal:
ret



СУВ. 


--------------------
тут могла быть Ваша реклама...
PM MAIL WWW ICQ   Вверх
Woodoo
Дата 13.6.2006, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 13.6.2006
Где: Севастополь || Ял та

Репутация: нет
Всего: нет



reti ставит глобальный флаг I в SREG афтоматом
cli в начале абработчика ненужэн. прерыванме автоматом отчищает бит I 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)"
PILOT ManiaK
UniBomb Mazzi

На данный раздел помимо Правил форума распространяются текже следующие правила:


  • Прежде чем создать тему воспользуйтесь поиском или посмотрите в faq. Возможно на форуме уже есть ответ на ваш или близкий к вашему вопрос.
  • В заголовке темы в квадратных скобках обозначьте используемое семейство микроконтроллера: [avr],[pic],[arm].
  • При создании темы с вопросом указывайте участок кода с ошибкой, версию компилятора, схемы подключения, fuse биты и прочие данные, которые помогут найти правильный ответ. Для форматирования текста программ используйте кнопку код.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Для флуда, просьб выполнить задание, поиска партнёров или исполнителей существуют свои разделы.
  • Если вы заметили несовместимое с правилами сообщение, то можете уведомить об этом модератора раздела нажав кнопку Репорт у соответствующего сообщения.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема »


 




[ Время генерации скрипта: 0.0816 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.