[an error occurred while processing this directive]
Я не глючу?
(«Телесистемы»: Конференция «Цифровые сигнальные процессоры (DSP) и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено st256 20 марта 2006 г. 12:51

Такое дело...

Есть регистр, в котором маскируются прерывания. Самый старший бит у него (15-й), если сброшен, маскирует ВСЕ прерывания. Т.е. если Вы работаете с таймером, то комбинация 0x8040 означает, что прерываться можно только от таймера: 15-й бит говорит, что нет общего маскирования, а бит шесть говорит, что разрешено прерываться от таймера.

Есть и бит 14. В нем при прерывании сохраняется бит 15. Т.е. при прерывании, бит 15 очищается (запрет на прерывания), но его копия попадает в 14 бит. Типа простейший стек. При команде reti 14 бит копируется в 15.

И вот я обнаруживаю (мама!), что прямо в прерывании, прямо в самом начале вектора, в регистре находится число 0х0004 !!!

Т.е. в 14-й регистр скопировалося 0!!!!!

Т.е. при этом прерывании, ВСЕ прерывания были ЗАПРЕЩЕНЫ!!!!!

Начал копать... Оказалось, что в критической секции я использую запрет на прерывания типа

bitc %imask, 15

И когда прерывание накладывается на эту команду (редко, но бывает такое) у меня выполняется и комада, и с этого же места процессор уходит на вектор с ОЩИЩЕННЫМ 15-м битом...

Типа я в растеренности... Может все-таки это симулятор глючит или теоретически такое возможно?

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание

E-mail: info@telesys.ru