Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: EINT0 ЧТО НЕ РАБОТАЕТ
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
asen
настраиваю 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; //Разрешаем внешнее прерывание

}
zltigo
Цитата(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.
asen
//Обработчик прерывания
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; //Разрешаем внешнее прерывание

}

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


А VICVectAddr = чегонибудь; в конце irq?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.