Перейти к содержанию

Help - Avr, Таймер.


Гость Наиль

Рекомендуемые сообщения

не пойму в чем дело frown.gif

Вроде должен же на прерывание уходить

В начале дал общее разрешение на Прерывания - SEI

Настроил 16-ти битный Таймер 1

Поставил маску на совпадении в канале А

Установил вектора

При пошаговом дебагиннге не работает- не переходит на прерывание.

Хотя TIFR выставляется, счетчик обнуляется...

Заметил, что бит разрешения прерываний регистра SERG в процессе исполнения программы тоже со временем обнуляется :/

Прошу помощи или ,хотя бы, подсказки smile.gif

сам код на ассамблере:

.include "tn2313def.inc"
.list

.def temp = R16
.def cou = R18
.def schet = R19
.equ kdel = 256

.cseg
.org 0

start: rjmp init
reti
reti
reti
rjmp timer
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti

init:

; стек

ldi temp, RAMEND
out SPL, temp

; компаратор

ldi temp, 0x80
out ACSR, temp


CLI

; настройка таймера

ldi temp, 0b00001001
out TCCR1B, temp
ldi temp, high(kdel)
out OCR1AH, temp
ldi temp, low(kdel)
out OCR1AL, temp

; maska таймера

ldi temp, 0b01000000
out TIMSK, temp

SEI


exit:
rjmp exit

timer:
inc cou

что я делаю не так?

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Наиль, не силен я в контроллерах. Но пока никого нет, может что-то подскажу.

А не нужно ли бит разрешения прерывания устанавливать каждый раз после свершившегося прерывания? Или что-то похожее на это.

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

У Вас неправильно оформлена процедура прерывания.На входе следует сохранять используемые регистры,включая SREG,на выходе восстановить регистры , и самое главное -завершить инструкцией RETI.

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Спасибо за отклики! Да , действительно, забыл в цикле прерывания указать команду reti. На счет того , что необходимо сохранять значения регистров вполне возможно! Но до экспериментов с таймером я пробовал использовать прерывания по изменению уровня на ножке схожим образом, регистр SERG не сохранял, но все же работало как надо :/ Может везло ?))) А дебаггинг я произвожу на AVR Studio 6 пошагово и в момент совпадения значений Счетчика с ORC1A выставляется соответствующий флаг , но прерывания не происходит, флаг так и остается висеть. :unknw: Может в AVR Studio прерывния не "обрабатываются", т.е. если залить на МК будет работать, а в среде разработке нет? Интересно то ,что бит прерываний SERG слетает до перехода на прерывание после четырех тактов в основном программном цикле-ожидании "EXIT". Так должно быть?! Еще раз спасибо за ваше внимание и ответы!

Изменено пользователем Nail
Ссылка на комментарий
Поделиться на другие сайты

Гость Прохожий

Сохранять SERG необязательно если он не "насилуется" в прерывании и не будет нужен по выходе из прерывания. Если соображалки хватит чтобы понять где надо а где не надо то пожалуйста.

А чтобы не мудрствовать лукаво можно сохранять его в обязательном порядке.

При входе в прерывание - прерывания запрещаются, инструкция reti в отличии от ret не только возвращает нас по адресу из стека но разрешает прерывания снова.

Ссылка на комментарий
Поделиться на другие сайты

Помогите же найти и исправить!( команду reti в прерывании уже добавил! Но повторюсь, на прерывание после совпадения программа не уходит , хотя флаг в регистре TIFR выставляется и маска прерываний по таймеру настроена.

Ссылка на комментарий
Поделиться на другие сайты

Да вроде все верно. Мож студия глючит. У меня Студия 4.18, на прерывания уходит. Но бывают страшные глюки после гибернации windows 7х64 (в XP - спящий режим назывался). Приходится перезагружать. Слыхал от народа в сети что могут некоторые программы влиять на работу студии.

Интересно то ,что бит прерываний SERG слетает до перехода на прерывание после четырех тактов в основном программном цикле-ожидании "EXIT". Так должно быть?!

SREG. Сброс или командой CLI или по уходе на прерывание с последуищим восстановлением по выходе из него.

Флаги прерываний выставляются в любом случае, а вот если еще 1) разрешены глобально прерывания, 2) разрешено само прерывание в маске, то мк уходит по вектору.

Как только МК уходит на прерывание, выставляется запрет на прерывание (глобально), после команды reti, бит возвращается. Исходно прерывания запрещены (так что CLI у вас лишняя). Бит возникновения прерывания так же сбрасывается при переходя.

Если выложите файл проги целиком, я его на своей студии прогнать попробую.

Нет никакой заслуги тому, кто даёт золото, думая, что даёт камень (Будда)

Ссылка на комментарий
Поделиться на другие сайты

Не гибернирую, использую Atmel Studio 6.0. Думаю, проблема именно в том, что флаг SREG сбрасывается сразу после его установки. Да, было бы очень здорово, если бы вы проверили код на своей машине! Заранее благодарю!

AssemblerApplication10.rar

Ссылка на комментарий
Поделиться на другие сайты

Попробуйте между операторами

exit:
rjmp exit

поставить хотя бы один nop.

Никогда не спорьте с дураком - люди могут не заметить между вами разницы

Ссылка на комментарий
Поделиться на другие сайты

У меня первое прерывание срабатывает сразу, после первого же rjmp exit. Почему-то, при записи старшего байта в регистр сравнения, устанавливается флаг в TIFR. А дальше по счётчику, как положено.

Никогда не спорьте с дураком - люди могут не заметить между вами разницы

Ссылка на комментарий
Поделиться на другие сайты

Поставил AVR studio 4, программа работает так как вы описали - первый проход сразу прерывание и далее норм), почему же в 6 ой версии у меня хоть таким образом не работает))) Как бы там ни было - спасибо Вам еще раз!

и, конечно, Спасибо всем, кто остался неравнодушным!

Ссылка на комментарий
Поделиться на другие сайты

Мда. Странно все это. Значит со студией или компом чего-то... Но мне радостно, что хоть у вас заработало))) Спасибо за содействие!!!

авр студия - глюкало еще то.

ldi temp, 0b01000000

out TIMSK, temp

В данном случае у меня при засылке в TIMSK числа 40h, чудесным образом устанавливается 5й бит, соответствующий числу 20h

то есть Output Compare B разрешен, Output Compare A запрещен

но тем не менее он работает как надо и вызывает прерывание по адресу 0x0004 TIMER1 COMPA Timer/Counter1 Compare Match A

!!!

и это не единственный глюк - правда раньше они были не столь вопиющие, но не менее неприятные.

Я давно забил на авр студию, и теперь убеждаюсь что сделал правильно.

И это в четвертой!

на шестую мне изначально смотреть больно, особенно учитывая, что баги, обнаруженные мной в четвертой, там продолжали присутствовать.

Изменено пользователем serg8825
Ссылка на комментарий
Поделиться на другие сайты

Попробовал в 6-й. Сначала глючила, в прерывание не заходила. Методом магических действий (сам не понял почему) - поставил точку останова в прерывании, выполнил рестарт (в Debug) и свершилось чудо (!!!). При перезапуске Студия вошла в прерывание. Далее по цепочке Debug-Options and Settings-Toolchain-Flavour Configuration сменил текущее "Atmel ARM 32-bit" на "AVR Assembler"...

И теперь Студия всегда заходит в прерывание (в данной программе). Вобщем ХЗ что повлияло.

Ссылка на комментарий
Поделиться на другие сайты

"Atmel ARM 32-bit" на "AVR Assembler"...

А это разве не при создании проекта задаётся?

Никогда не спорьте с дураком - люди могут не заметить между вами разницы

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...