Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

Закрытая тема
Опции темы
Непрочитано 17.03.2017, 12:05   #1
wlad773
Прописка
 
Аватар для wlad773
 
Регистрация: 06.05.2008
Адрес: Пятигорск
Сообщений: 222
Сказал спасибо: 11
Сказали Спасибо 17 раз(а) в 13 сообщении(ях)
wlad773 на пути к лучшему
По умолчанию Atmega16a Вектора прерываний

Добрый день. Случилась странность, при написании проги на АСМе в AVRStudio4 вдруг выяснилось, что поменялись вектора прерываний ТМР0 и ТМР2 (другие не проверял). Причем в симуляторе работает как по датишу, а в железе иначе (выяснил опытным путем). Переполнение ТМР0( 0х12) уходит на USART RXC(0х16), компаратор ТМР0 ( 0х26) уходит на SPI, STC(0х14). Переполнение ТМР2( 0х08 уходит на TMR1 CAPR(0х10), компаратор ТМР2(0х06) уходит на TIMER2 OVF(0х08. bootrst и ivsel не устанавливаю, JTAG и компаратор отключаю. В WIN7-64 и WIN XP-32 - одинаково. Причем раньше написал несколько прог и все было правильно. Третий день ломаю голову не пойму в чем проблема.
Реклама:

Последний раз редактировалось wlad773; 17.03.2017 в 12:09.
wlad773 вне форума  
Непрочитано 17.03.2017, 13:10   #2
ForcePoint
Почётный гражданин KAZUS.RU
 
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 7,050
Сказал спасибо: 3,041
Сказали Спасибо 3,210 раз(а) в 2,180 сообщении(ях)
ForcePoint на пути к лучшему
По умолчанию Re: Atmega16a Вектора прерываний

ИМХО - фантастика. Может не тот "def" подключен?
__________________
Экзорцист 40-го уровня.
ForcePoint вне форума  
Непрочитано 17.03.2017, 13:50   #3
wlad773
Прописка
 
Аватар для wlad773
 
Регистрация: 06.05.2008
Адрес: Пятигорск
Сообщений: 222
Сказал спасибо: 11
Сказали Спасибо 17 раз(а) в 13 сообщении(ях)
wlad773 на пути к лучшему
По умолчанию Re: Atmega16a Вектора прерываний

Фантастика не то слово. Про def не знаю, я назначаю регистру символическое имя. А device Atmega16 и Atmega16а - одинаково.
Даже сделал тестовую програмку с указанием прерываний. Через тере указано куда фактически выходит прерывание.
.device ATmega16a
.NOLIST
.include "m16adef.inc"
.LIST

.set CO = PD6;15 контрольный выход
.set IR_in = PD3;12 вход

.def T_OUTH = R20 ; СБ временной задержки
.def T_OUTL = R21 ; МБ временной задержки

.def TMP = R23 ;
.def TMPL = R24 ;
.def TMPH = R25 ;

.org 0x0000
rjmp BEGIN
reti
reti;INT0
reti
reti;INT1;
reti
reti;TMR2 COMP;
reti
reti;TMR2 OVF - TMR2 COMP
reti
RJMP INTUP;reti;TMR1 CAPR - TMR2 OVF
reti
reti;TMP1 COMPA
reti
reti;TMP1 COMPB
reti
;
reti;TMP1 OVF
reti
reti;TMR0 OVF
reti
reti;SPI,STC - TMR0 COMP
reti
reti;USART RXC - TMR0 OVF
reti
reti;USART UDRE
reti
reti;USART TXC
reti
reti;ADC
reti
reti;EE RDY
reti
;
reti;ANA COMP
reti
reti;TWI
reti
reti;INT2
reti
reti;TMR0_COMP
reti
reti;SPM RDY


.org 0x0030
BEGIN: ldi tmp,Low(RamEnd) ; ЗАГРУЗКА
out SPL,tmp ; УКАЗАТЕЛЯ
ldi tmp,HIGH(RamEnd) ; СТЕКА
out SPH,tmp ; ДЛЯ ВСЕХ ПРОГРАММ
ldi tmp,1‹‹ACD ; выкл.
OUT ACSR,TMP ; компаратор
;Отключение JTAG интерфейса
LDI TMP,0x80 ;
OUT MCUCSR,TMP ;
OUT MCUCSR,TMP ;

LDI TMP,0B11111111 ; настроить выводы порта A
OUT DDRA,TMP ;
LDI TMP,0B00000000 ;
OUT PORTA,TMP ;
LDI TMP,0B11111111 ; настроить выводы порта B
OUT DDRB,TMP ;
LDI TMP,0B00000000 ;
OUT PORTB,TMP ;
LDI TMP,0B11111111 ; настроить выводы порта C
OUT DDRC,TMP ;
LDI TMP,0B00000000 ;
OUT PORTC,TMP ;
LDI TMP,0B11110111 ; настроить выводы порта D
OUT DDRD,TMP ;
LDI TMP,0B00001000 ;
OUT PORTD,TMP ;
;Настройка ТМР и WDT
; TMR0
; LDI TMP,200 ; время ТМР0
; OUT OCR0,TMP ; Hz(200мКСек)
;; LDI TMP,0B00000001 ;нормальный режим
; LDI TMP,0B00001001 ;СТС режим
; OUT TCCR0,TMP ;
;; LDI TMP,0b00000001 ;прерывания от переполнения ТМР0
; LDI TMP,0b00000010 ;прерывания от компаратора ТМР0
; OUT TIMSK,TMP ;
; TMR1
; LDI TMP,0B10000010 ; режим 6-и разрядной ШИМ,
; OUT TCCR1A,TMP ; с выводом на ОС1А, сброс при совпадении
; LDI TMP,63 ; режим 6-и разрядной ШИМ,
; OUT ICR1L,TMP ; 31.250kHz
; LDI TMP,0B00011000 ; режим 6-и разрядной ШИМ,
; OUT TCCR1B,TMP ; таймер-выкл.
; TMR2
; LDI TMP,0x08 ; асинхронный режим
; OUT ASSR,TMP ; таймера 2 от кварца 32768Гц
LDI TMP,127 ;время ТМР2
OUT OCR2,TMP ;
LDI TMP,0B00000001 ;режим нормальный предделитель ТМР2= 1/1
; LDI TMP,0B00001001 ;режим CTC предделитель ТМР2= 1/1
OUT TCCR2,TMP ;
LDI TMP,0b01000000 ;прерывания от переполнения ТМР2
; LDI TMP,0b10000000 ;прерывания от компаратора ТМР2
OUT TIMSK,TMP ;
;Настройка WDT
; LDI TMP,0B00011000 ; включить
; OUT WDTCR,TMP ; WDT, ПРЕРЫВАНИЕ ЧЕРЕЗ
; LDI TMP,0B00001001 ; предделитель
; OUT WDTCR,TMP ; WDT= 32.5мСЕК

; LDI TMP,0x08 ;прерывание
; OUT MCUCR,TMP ;по спаду INT1
; LDI TMP,0x80 ;разрешить прерывание
; OUT GICR,TMP ;по INT1
SEI ;глобальное разрешение прерываний

clr BIT ;
;************** MAIN **************
m1: nop
rjmp m1
;=========================== ПРЕРЫВАНИЕ =============================================
INTUP: PUSH TMP ;
IN TMP,SREG ;
PUSH TMP ;

sbi portd,CO
rcall Del_40uS
cbi portd,CO

POP TMP ;
OUT SREG,TMP ;
POP TMP ;
reti ;
;******************************** ТАЙМАУТЫ
Del_40uS: LDI T_OUTL,10
Del004: DEC T_OUTL
BRNE Del004
RET

END:
;===============================================
.ESEG

.db 0x00

EEND:
wlad773 вне форума  
Непрочитано 17.03.2017, 14:51   #4
kolobok0
Частый гость
 
Регистрация: 10.09.2010
Адрес: Резиновая
Сообщений: 45
Сказал спасибо: 3
Сказали Спасибо 14 раз(а) в 12 сообщении(ях)
kolobok0 на пути к лучшему
Счастье Re: Atmega16a Вектора прерываний

Сообщение от wlad773 Посмотреть сообщение
...Даже сделал тестовую програмку


.device ATmega16a
.NOLIST
.include "m16adef.inc"
......
.org 0x0000
rjmp BEGIN
reti
reti;INT0
reti
reti;INT1;
reti
reti;TMR2 COMP;
reti
reti;TMR2 OVF - TMR2 COMP
reti
...

В то, что это ранее работало - бряхня!!!
Читаем справку на команды АВР... 1 слово(2 байта) = что рети что джамп.
Смотрим описание таблицы векторов указанного камня:
INT0
INT1
TIMER2COMP
и т.д.
Дальше ясно, почему оно никогда не будет работать?

Вы бы посмотрели бы повнимательней грамотные исходники.
вот например первый попавшийся в гугле:

.CSEG
.ORG 0x0000
RJMP Start ;перепрыгиваем таблицу векторов.
.ORG INT0addr ; External Interrupt0 Vector Address
RJMP INT0_expection
.ORG INT1addr ; External Interrupt1 Vector Address
RETI
.ORG OC2addr ; Output Compare2 Interrupt Vector Address
RJMP PWM_1
.ORG OVF2addr ; Overflow2 Interrupt Vector Address
RETI
.ORG ICP1addr ;Input Capture1 Interrupt Vector Address
RETI

Наводящий вопрос:
Откуда тут взялось
INT0addr
INT1addr
????
И зачем оно вписано в файлик поставляемый вместе со студией????
Прально = чтоб ЮЗАТЬ (по русски использовать).

Перепишите Ваш исходник правильно и будет Вам счастье.

(круглый)
ЗЫ
Ну и нефиг на стэк загонять R23 и регистр состояния, если Вы R20 в дальнейшем поганите. Вы либо крестик снимите, либо труселя наденьте! А то надёргали кода из разных сырцов не разобравшись ни с одним ни с другим... Это Вас никуда не приведёт к сожалению либо счастью...
kolobok0 вне форума  
Сказали "Спасибо" kolobok0
ForcePoint (17.03.2017)
Непрочитано 18.03.2017, 08:42   #5
wlad773
Прописка
 
Аватар для wlad773
 
Регистрация: 06.05.2008
Адрес: Пятигорск
Сообщений: 222
Сказал спасибо: 11
Сказали Спасибо 17 раз(а) в 13 сообщении(ях)
wlad773 на пути к лучшему
По умолчанию Re: Atmega16a Вектора прерываний

Обычно я не отвечаю на сообщения самых умных но сегодня, сранья, меня прет. Так вот что я тебе скажу птичка, извини kolobok0. Вам не хватает внимательности и усидчивости. Я сказал, что программы которые писал ранее работают правильно и векторы прерываний были согласно датишу. Но вдруг ,что-то случилось, может переустановка системы? И я набросал тестовую прогу, не претендую на изящество, даже наоборот. Но она тоже работает! Между предложенным тобой вариантом и написанным мной нет никакой разницы. Что бы это понять изучи организацию памяти программ. А набросал, что бы найти вектор прерывания. Как писал ранее- в симуляторе все правильно,а в железе не работает. В каждую строку, по очереди, вставлял команду перехода, прошивал МК и делал так до тех пор пока он не задергает ногой. Потом менял настройки таймеров и повторял. Для тех, кто не был в подводной лодке, не стал этого объяснять, думал само собой разумеется. И при чем тут регистры, они мои, как хочу так и имею!
Буду всем оч благодарен, если в моих темах ответов с упреками от самых умных больше не будет. Либо по существу, либо просто промолчать.
wlad773 вне форума  
Непрочитано 18.03.2017, 11:51   #6
georg65
Почётный гражданин KAZUS.RU
 
Регистрация: 23.10.2007
Адрес: Великие Луки
Сообщений: 2,942
Сказал спасибо: 730
Сказали Спасибо 1,855 раз(а) в 881 сообщении(ях)
georg65 на пути к лучшему
По умолчанию Re: Atmega16a Вектора прерываний

А микросхема точно Мега16? Можете не отвечать.
georg65 вне форума  
Непрочитано 18.03.2017, 11:57   #7
ForcePoint
Почётный гражданин KAZUS.RU
 
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 7,050
Сказал спасибо: 3,041
Сказали Спасибо 3,210 раз(а) в 2,180 сообщении(ях)
ForcePoint на пути к лучшему
По умолчанию Re: Atmega16a Вектора прерываний

Сообщение от wlad773 Посмотреть сообщение
Но вдруг ,что-то случилось, может переустановка системы?
Это - тоже фантастика.

Сообщение от wlad773 Посмотреть сообщение
Между предложенным тобой вариантом и написанным мной нет никакой разницы. Что бы это понять изучи организацию памяти программ. А набросал, что бы найти вектор прерывания.
Читая подиагонали ответ "круглого" решил, что проблему он выявил точно. Нет, не выявил.
Но, одно хорошее замечание есть. Почему-бы не пользоваться предопределенными в "def"-файле адресами входов в таблицу прерываний? Не надо тогда будет лишних телодвижений с вставками reti
Цитата:
Код:
CSEG
.ORG 0x0000
RJMP Start ;перепрыгиваем таблицу векторов.
.ORG INT0addr ; External Interrupt0 Vector Address
RJMP INT0_expection
.ORG INT1addr ; External Interrupt1 Vector Address
RETI
.ORG OC2addr ; Output Compare2 Interrupt Vector Address
RJMP PWM_1
.ORG OVF2addr ; Overflow2 Interrupt Vector Address
RETI
.ORG ICP1addr ;Input Capture1 Interrupt Vector Address
RETI
Если не используется прерывание INT1 - то подчёркнутый фрагмент можно просто выкинуть, но правильность таблицы не будет нарушена. Если не углубляться в дебри надёжности кода...

Ну, и по сути вопроса, - какая версия Студии и выложите файлы "def" и "xml" от mega16a. Бывают ошибки и в них...
__________________
Экзорцист 40-го уровня.
ForcePoint вне форума  
Непрочитано 18.03.2017, 12:05   #8
wlad773
Прописка
 
Аватар для wlad773
 
Регистрация: 06.05.2008
Адрес: Пятигорск
Сообщений: 222
Сказал спасибо: 11
Сказали Спасибо 17 раз(а) в 13 сообщении(ях)
wlad773 на пути к лучшему
По умолчанию Re: Atmega16a Вектора прерываний

Сообщение от georg65 Посмотреть сообщение
А микросхема точно Мега16? Можете не отвечать.
Atmega16a. Но думаю разницы нет.
wlad773 вне форума  
Непрочитано 18.03.2017, 12:44   #9
wlad773
Прописка
 
Аватар для wlad773
 
Регистрация: 06.05.2008
Адрес: Пятигорск
Сообщений: 222
Сказал спасибо: 11
Сказали Спасибо 17 раз(а) в 13 сообщении(ях)
wlad773 на пути к лучшему
По умолчанию Re: Atmega16a Вектора прерываний

Сообщение от ForcePoint Посмотреть сообщение
Почему-бы не пользоваться предопределенными в "def"-файле адресами входов в таблицу прерываний?
Я нормальный человек и никогда не делал как в примере, но ситуация заставила. Не обращайте внимание на корявое исполнение. Он помог мне выяснить::
1. что в симуляторе ВП работают правильно.
2. найти реальные адреса ВП.
Кстати INT1 работает правильно. Пользуюсь AVRStudio 4.19 сборка 730. 4.18 на WIN7 не стала.
Не получается вставить файлы с такими расширениями. Научите.
У меня была WIN7, в прошлом году обновил до WIN10, на другом локальном диске WIN_ХР. И было счастье. Но снес WIN10 (не работала с не подписанными драйверами). Поставил WIN7 из проверенного источника. И заметил такую лажу. Я не утверждаю что виновата винда, просто такая последовательность действий. А может программатор козлить ( ProgIsp)?
wlad773 вне форума  
Непрочитано 18.03.2017, 12:46   #10
wlad773
Прописка
 
Аватар для wlad773
 
Регистрация: 06.05.2008
Адрес: Пятигорск
Сообщений: 222
Сказал спасибо: 11
Сказали Спасибо 17 раз(а) в 13 сообщении(ях)
wlad773 на пути к лучшему
По умолчанию Re: Atmega16a Вектора прерываний

П.С. Не нашел def ваааще, ни поиском ни вручную, может тут сАбака порылась? Укажите путь расположения файлов.
wlad773 вне форума  
Закрытая тема

Закладки


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ускорить компьютер 7Fantomas7 Ремонт оргтехники 111 08.08.2018 05:27
Вложенность прерываний в Cortex-M makser1 ARM 12 11.03.2014 04:59
ATMega & TWI в режиме прерываний nerozero Микроконтроллеры, АЦП, память и т.д 13 07.12.2010 17:24
Обработка прерываний UART ADuC7026 korel_one Микроконтроллеры, АЦП, память и т.д 0 01.04.2010 10:44
Как очистить очередь прерываний в ATMega8535? greafuger Микроконтроллеры, АЦП, память и т.д 4 04.06.2008 23:03


Часовой пояс GMT +4, время: 01:48.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot