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

 
 
> EINT0 ЧТО НЕ РАБОТАЕТ, Может я что забываю вроде все нармально
asen
сообщение Nov 27 2006, 13:15
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 513
Регистрация: 5-09-05
Из: Барнаул
Пользователь №: 8 220



настраиваю EINT0 на LPC2292 пытаюсь зделать вызов по переходу 1->0 но контролле просто виснет и все вчем причина не пойму
может будут какиенибуть замечания ?
вот листинг :

#define VIC_EINT0_bit (1 << VIC_EINT0)

void Extern_Interrupt(void){

out_coment("ppp",3,"U",0);
ct_ext_front++;
EXTINT_bit.EINT0=1;
}

void InitExternInterrupt(void){

PINSEL1_bit.P0_16 = 0x1; //Назначаем линии порта P0.16 функцию источника внешнего прерывания EINT0
VICIntEnable &= ~VIC_EINT0_bit;
EXTINT_bit.EINT0=1;
EXTMODE_bit.EXTMODE0 = 1; //Для входа EINT0 выбрана реакция на переход
EXTPOLAR_bit.EXTPOLAR0 = 0; //выбрана чувствительность к спаду
EXTINT_bit.EINT0=0;
VICIntSelect &= ~VIC_EINT0_bit; //Назначаем прерывание EINT0 как IRQ
VICVectAddr5 = (unsigned int) & Extern_Interrupt; //Указываем обработчик прерывания
VICVectCntl5 = 0x20 | VIC_EINT0; //Назначаем и разрешаем в пятом слоте прерывание EINT0
VICIntEnable |= VIC_EINT0_bit; //Разрешаем внешнее прерывание

}
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 3)
zltigo
сообщение Nov 27 2006, 13:21
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(asen @ Nov 27 2006, 12:15) *
EXTMODE_bit.EXTMODE0 = 1; //Для входа EINT0 выбрана реакция на переход
EXTPOLAR_bit.EXTPOLAR0 = 0; //выбрана чувствительность к спаду

Errata читаем, да?
Ну и добавляем пунктик 3а дополнительно, ибо этот баг не описан:

Код
    // Set edle-sensetive Mode
    // The steps involved in the configuration of the EXTMODE and/or EXTPOLAR would be as follow:-
    // 1. Write 0x00 to VPBDIV
    // 2. Write the desired value to EXTMODE or EXTPOLAR register
    // 3. Write the same value to VPBDIV
    // 3a. Write 0x00 to VPBDIV (additional step for INT0 )
    // 4. Restore the VPBDIV to the previously saved value or simply write to the register again
    //    with the desired value.
    ulong i;
    VPBDIV = 0;                 // 1.
    i = EXTMODE & ( EXTMODE_EXTMODE0|EXTMODE_EXTMODE1|EXTMODE_EXTMODE2|EXTMODE_EXTMODE3);  // Get Curent Value
    i |= EXTMODE_EXTMODE0;

    EXTMODE = i;             // 2.
    VPBDIV  = i;             // 3.
    VPBDIV  = 0;         // 3a    
    VPBDIV  = configBUS_CLK; // 4.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
asen
сообщение Dec 5 2006, 07:10
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 513
Регистрация: 5-09-05
Из: Барнаул
Пользователь №: 8 220



//Обработчик прерывания
void Extern_Interrupt(void){

ct_ext_front++;
EXTINT_bit.EINT0=1;
if(f==0){
set_logic_line(out_starter,1);
f = 1;
}
else{
set_logic_line(out_starter,0);
f = 0;
}
}

//Инит внешнего прерывания
void InitExternInterrupt(void){

PINSEL1_bit.P0_16 = 0x1; //Назначаем линии порта P0.16 функцию источника внешнего прерывания EINT0

onevar = VPBDIV;
VPBDIV = 0x00;
EXTMODE_bit.EXTMODE0 = 0; //Для входа EINT0 выбрана реакция на переход
EXTPOLAR_bit.EXTPOLAR0 = 1; //выбрана чувствительность к спаду
VPBDIV = onevar;
VPBDIV = 0x00;
VPBDIV = onevar;

VICIntSelect &= ~VIC_EINT0_bit; //Назначаем прерывание EINT0 как IRQ
VICVectAddr10 = (unsigned int) & Extern_Interrupt; //Указываем обработчик прерывания
VICVectCntl10 = 0x20 | VIC_EINT0; //Назначаем и разрешаем в пятом слоте прерывание EINT0
VICIntEnable |= VIC_EINT0_bit; //Разрешаем внешнее прерывание

}

Так вот прерывание вроде заработало
Но только проблемка я его использую для счета импульсов с компоратора
Сигнал приходит чистый проверяли а насчитывает ерунду всякую. я вод думаю нет ли тут какой замуты с сбросом прерывания в обработчике я вроде делаю все нормально подскажите кто летал уже ?
Go to the top of the page
 
+Quote Post
Alex03
сообщение Dec 5 2006, 07:42
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 359
Регистрация: 9-12-05
Пользователь №: 12 034



Цитата(asen @ Dec 5 2006, 09:10) *
Так вот прерывание вроде заработало
Но только проблемка я его использую для счета импульсов с компоратора
Сигнал приходит чистый проверяли а насчитывает ерунду всякую. я вод думаю нет ли тут какой замуты с сбросом прерывания в обработчике я вроде делаю все нормально подскажите кто летал уже ?


А VICVectAddr = чегонибудь; в конце irq?
Go to the top of the page
 
+Quote Post

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

 


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


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