реклама на сайте
подробности

 
 
> Обработчик прерывания, Как поправить Keil'овскую заготовку обработчика???
AndreyS
сообщение Feb 14 2008, 21:48
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 235
Регистрация: 28-01-05
Из: Санкт-Петербург
Пользователь №: 2 276



Добрый день.

В кратце опишу систему:

проц - SiLabs 8051f130
тип памяти - far
MBYTE сидит на P4

Проблема в следующем.
В программе использую XBANKING.a51 и соответствующую опцию use far memory.
В связи с этим Keil в каждый обработчик добавляет асм строки по сохранению в стек значения ?C?XPAGE1SFR (адрес SFR=P4) и устанавливает в нее значение ?C?XPAGE1RST. Перед выходом из прерывания переменная ?C?XPAGE1SFR восстанавливается из стека.
Это все хорошо - даже отлично. Но. Я использую timer2 и его контрол регистр TMR2CN с флагом прерывания TF2 сидит по адресу SFR 0xC8 на странице SFR = 0x00. При этом для MBYTE (как я уже сказал ранее) использую P4. Он находится по адресу SFR 0xC8, но на странице 0x0F. При вызове прерывания проц автоматически переходит на SFR страницу прерывания (если это таймер 2 то переключает SFRPAGE со страницы 0x0F на 0x00. А страницу 0x0F сохраняет) и соответственно Keilовские строки по сохранению в стек ?C?XPAGE1SFR сохраняют контрол регистр таймера 2. А на выходе из прерывния благополучно восстанавливают контрол регистр и соответственно возведенный флаг TF2. Происходит очень частый вызов прерывания timer 2. Прога в полном ауте.

Для исключения этой ситуации вижу два пути решения:
1) подкорректировать приамбулы входа/выхода в прерывание (Keilовские)
2) вырубить нафиг автоматический переход на страницу SFR в прерывании и в каждом прерывании вставлять свой переключатель.

Какиеесть еще пути решения данной проблемы????????

Второй путь в принципе даже лучше. Но тогда основной страницей SFR для всей проги должна стать 0x0F.
Но мне просто интересно как в прогу вставить кусок асма???
Что-то #prgma asm не сработала. Написало вот: INTERRUPT.C(64): error C272: 'asm/endasm' requires src-control to be active. Хотя галочка SRC стоит на всех файлах. Читал описание и не допонял. Оно работает везде или только как тело функции????

Спасибо.

Сообщение отредактировал AndreyS - Feb 14 2008, 21:52


--------------------
Удачи.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 17th July 2025 - 23:54
Рейтинг@Mail.ru


Страница сгенерированна за 0.01261 секунд с 7
ELECTRONIX ©2004-2016