|
Low priority interrupts PIC18F4550, Не отключаются LPI |
|
|
|
Feb 11 2010, 07:41
|
Группа: Участник
Сообщений: 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),при этом отключение/подключение прерываний остается, то ситуация еще более запутывается. Прошу сообщить, что я делаю не так?
|
|
|
|
|
 |
Ответов
|
Feb 12 2010, 15:09
|
Группа: Участник
Сообщений: 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
|
|
|
|
|
Feb 13 2010, 01:12
|
Местный
  
Группа: Участник
Сообщений: 226
Регистрация: 10-07-09
Пользователь №: 51 126

|
Цитата(Роман77 @ Feb 12 2010, 19:09)  Для Ххимер выделил любимым цветом... Такой умный, а ничего не работает. interruptlow InterruptHandlerHigh - глаз не режет???( по форме, а не по содержанию) Цитата Функция WriteConfig() обеспечивает запись данных в EEPROM, во время которой на период процедуры записи, отключаются прерывания. Зачем???Прерывания при записи отключают в основной проге, а в прерывании зачем, тем более с высоким приоритетом??? В папке Example MCC18 найдите example3.c ... Цитата Так вот, если прерывания отключаются в WriteConfig(), то затем отключить все низкоуровневые прерывания INTCONbits.GIEL = 0 не удается Пипец... А что, низкоуровневое может прервать высокоуровневое??? К чему весь этот бред??? ...учите матчасть.
Сообщение отредактировал HHIMERA - Feb 13 2010, 01:21
|
|
|
|
|
Feb 13 2010, 16:54
|

Гуру
     
Группа: Модераторы
Сообщений: 10 983
Регистрация: 23-11-05
Пользователь №: 11 287

|
Цитата(jam @ Feb 13 2010, 15:08)  Глаз режет - поэтому отказался от компилятора и для pic18 использую только asm. Но вот не могу понять , если movff занимает 2 cycle , а movf f1,0 movwf f2 тоже 2cycle - то зачем такая команда нужна и почему бы не сделать макрос. pic24 гораздо лучше pic18 , а стоит примерно столько же - советую переходить. А вы бегите за такси, а не за автобусом - больше денег сэкономите.  Может, Вы просто не умеете их готовить? (с) Меня, к примеру, HT-PICC18 вполне устраивает. А PIC32 - пожалуй, ещё лучше, почему сразу не на него?
|
|
|
|
Сообщений в этой теме
Роман77 Low priority interrupts PIC18F4550 Feb 11 2010, 07:41 Herz А какой это компилятор? Feb 11 2010, 08:54 Роман77 Цитата(Herz @ Feb 11 2010, 11:54) А какой... Feb 11 2010, 16:44     HHIMERA Цитата(Herz @ Feb 13 2010, 19:54) Меня, к... Feb 13 2010, 18:40     jam Цитата(Herz @ Feb 13 2010, 19:54) А вы бе... Feb 13 2010, 21:17   Роман77 [quote name='HHIMERA' date='Feb 13 201... Feb 15 2010, 04:11    HHIMERA Цитата(Роман77 @ Feb 15 2010, 07:11) Кто ... Feb 15 2010, 11:07 HHIMERA Цитата(Роман77 @ Feb 11 2010, 10:41) CODE... Feb 11 2010, 22:43 jam Ну тогда надо запустить дебагер и тайна откроется. Feb 12 2010, 23:36 Herz Круто, наверное. Но мне уже таких подвигов вряд ли... Feb 14 2010, 10:25 jam Цитата(Herz @ Feb 14 2010, 13:25) Круто, ... Feb 15 2010, 00:38
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|