ATTiny2313 и регистры

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Родился
Сообщения: 5
Зарегистрирован: Вт дек 08, 2009 13:26:37

Сообщение digit32 »

Добрый день!

Пишу программу на asm, под AtTiny2313. Устройство общается с ПК по com порту. Обработку получения данных от ПК и собственно обработку данных реализовал на прерывании Rx Complete.

Главный цикл программы выглядит таким образом:
main:
nop
ret
т.е. в неи ничего не делается.

При обработке прерывания использую регистр R25 в качестве "состояния устройства". Т.е. получили байт, изменяем состояние на следующее.

Собственно проблема. Судя по поведению программы получается таким образом, что после выхода из обработчика RXComplete значение R25 сбрасывается в первоначальное значение.

Вопрос 1. я правильно понимаю, что в регистрах данные сохраняются? Естествено до тех пор пока есть питаник МК.

Вопрос 2. возможно ктото сталкивался с аналогичными проблемами. напишите, плз.

PS. проверил несколько раз по коду push/pop для этого регистра не использую. И вообще, изменяю значение этого регистра только в обработчике прерывания.
Реклама
GP1
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград

Сообщение GP1 »

код в студию!
Чем дальше, тем больше становлюсь занудой...
Изображение
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....

Сообщение Meteor »

И про принимаемые данные поподробнее. Сколько обработка идет и сколько принимаете...
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Контактная информация:
Родился
Сообщения: 5
Зарегистрирован: Вт дек 08, 2009 13:26:37

Сообщение digit32 »

Нашел причину. Первоначально планировал использовать и прерывание TxComplete. Потом отказался от этого, но код отредактировал не полностью. В итоге в коде было такое

TxComplete:
reti

В результате чего получалось следующее. обрабатываем RxComplete, отсылаем проверочные данные назад ПК, соответственно срабатывает TxComplete. В итоге вызывается reti. И выполнение программы возвращается на адрес 0, т.е. reset. И снова инициализация.
Реклама
Эиком - электронные компоненты и радиодетали
GP1
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград

Сообщение GP1 »

если вместо обработчика стоит заглушка, это ни в каком случае не приведет к перезапуску системы, т.о. ошибка еще не найдена.
Чем дальше, тем больше становлюсь занудой...
Изображение
Контактная информация:
Реклама
Родился
Сообщения: 5
Зарегистрирован: Вт дек 08, 2009 13:26:37

Сообщение digit32 »

последовательность такая.
1. инициализирую МК, в том числе и стек.
2. МК работает.
3. Указатель стека указывает на конец SRAM.
3. передаю данные с компа. срабатывает прерывание на RX.
В стек записывается адрес где прервалась программа,
соответственно указатель стека (SP) смещается.
4. выхожу из обработчика RX, указатель стека уменьшается.
5. Обрабатывается прерывание TX, но в обработчике только reti.
SP уменьшается еще раз.

Т.е. увеличился SP один раз, а уменьшился 2.
Я понимаю ситуацию таким образом. И получается, что программа должна вернуться по адресу $00 т.е. на reset.

Во всяком случае, после этого прошивка заработала.
Реклама
Опытный кот
Аватара пользователя
Сообщения: 890
Зарегистрирован: Вт янв 20, 2009 14:49:08
Откуда: Гондурас, Мурманск

Сообщение DrWatson »

digit32 писал(а):
Главный цикл программы выглядит таким образом:
main:
nop
ret
т.е. в неи ничего не делается.
Проблема скорее всего еще и здесь. главный цикл должен выглядеть так:

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

main: rjmp main
- Если вы такие умные, то почему тогда строем не ходите?
ἓν οἶδα ὅτι οὐδὲν οἶδα (с) Σωκράτης
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»