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

 
 
> Low priority interrupts PIC18F4550, Не отключаются LPI
Роман77
сообщение Feb 11 2010, 07:41
Сообщение #1





Группа: Участник
Сообщений: 8
Регистрация: 10-03-07
Пользователь №: 26 039



Здравствуйте!
Имеется разделение прерываний по приоритетам. Main и ISRы находятся в одном файле, вспомогательные функции в другом.
CODE
#pragma interruptlow InterruptHandlerHigh

void InterruptHandlerHigh ()
{

if( INTCONbits.INT0IF) //Check for INT0
{

WriteConfig();
// INTCONbits.RBIE = 0; //Disbles the RB port change interrupt
// INTCON3bits.INT2IE = 0; //Disbles the INT2 external interrupt
INTCONbits.GIEL = 0;
}
}


Функция WriteConfig() обеспечивает запись данных в EEPROM, во время которой на период процедуры записи, отключаются прерывания. Так вот, если прерывания отключаются в WriteConfig(), то затем отключить все низкоуровневые прерывания INTCONbits.GIEL = 0 не удается, а только посредством соответствующих битов IE=0. Если отключение прерываний убрать из WriteConfig(), то INTCONbits.GIEL = 0 работает. Если же вложить WriteConfig() в другую какую-ть подпрограмму (SOUBROTINExx-> WriteConfig),при этом отключение/подключение прерываний остается, то ситуация еще более запутывается.

Прошу сообщить, что я делаю не так?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
jam
сообщение Feb 11 2010, 18:01
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 792
Регистрация: 9-08-05
Из: Транай
Пользователь №: 7 474



Цитата(Роман77 @ Feb 11 2010, 10:41) *
Здравствуйте!
Имеется разделение прерываний по приоритетам. Main и ISRы находятся в одном файле, вспомогательные функции в другом.
#pragma interruptlow InterruptHandlerHigh

void InterruptHandlerHigh ()
{

Прошу сообщить, что я делаю не так?

Насколько я помню в pic18 была ошибка и компилятор нельзя использовать если используются интеррапты с автоматическим спасением регистров (из-за команды movff ) - не слышал, что её уже поправили. Может быть дело в этом.
Go to the top of the page
 
+Quote Post
Роман77
сообщение Feb 12 2010, 15:09
Сообщение #3





Группа: Участник
Сообщений: 8
Регистрация: 10-03-07
Пользователь №: 26 039



Цитата(jam @ Feb 11 2010, 21:01) *
Насколько я помню в pic18 была ошибка и компилятор нельзя использовать если используются интеррапты с автоматическим спасением регистров (из-за команды movff ) - не слышал, что её уже поправили. Может быть дело в этом.

Да в документе "PIC18F2455/2550/4455/4550 Family Silicon Errata and Data Sheet Clarification" есть об этом "If an interrupt occurs during a two-cycle instruction that modifies the STATUS, BSR or WREG register, the unmodified value of the register will be saved to the corresponding Fast Return (Shadow) register and upon a fast return from the interrupt, the unmodified value will be restored to the STATUS, BSR or WREG register. For example, if a high-priority interrupt occurs during the instruction, “MOVFF TEMP, WREG”, the MOVFF instruction will be completed and WREG will be loaded with the value of TEMP before branching to ISR."
Но здесь другой случай. В томже документе сказано:
"If using the Microchip MPLAB® C18 C Compiler, define both high and low-priority interrupt handler functions as “low priority” by using the pragma interruptlow directive."
Для Ххимер выделил любимым цветом, учите матчасть.

Сообщение отредактировал Роман77 - Feb 12 2010, 15:45
Go to the top of the page
 
+Quote Post



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

 


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


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