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

 
 
 
Reply to this topicStart new topic
> Прерывание EXTINT в LPC2134, Вопросы по настройки прерывания по фронтам
Папа Карло
сообщение Jun 3 2008, 17:20
Сообщение #1


Частый гость
**

Группа: Новичок
Сообщений: 176
Регистрация: 15-02-08
Из: Москва
Пользователь №: 35 074



Нужно регистрировать внешнее изменение лог сигнала МК.
Не могу понять как мне настроить, чтоб МК выдавал прерывание по фрону сигнала.

В Кеил при симуляции биты EXTMODE, EXTPOLAR = 0.

При возникновении 0-ля на входе возникает прерывание, чтоб программа вышла из прерывания мне приходилось ставить 1-цу на ноге и скидывать EINT. В Кеил EINT не скидывался, если на ноге был 0.

Подскажите пожалуйста как мне настроить по фронтам прерывания ?
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jun 3 2008, 18:08
Сообщение #2


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Код
    VPBDIV = 0x00;          // перед изменением EXTPOLAR или EXTMODE сбросить в ноль
    EXTMODE = 0x0f;         // все прерывания по изменению (edge)
    VPBDIV = 0x0f;          // то же самое значение, что и в EXTMODE
    VPBDIV = 0x00;          // перед изменением EXTPOLAR или EXTMODE сбросить в ноль
    EXTPOLAR = 0x0f;        // все прерывания по фронту
    VPBDIV = 0x00;          // то же самое значение, что и в EXTPOLAR
    VPBDIV = 0x00;          // перед изменением EXTPOLAR или EXTMODE сбросить в ноль (хз, может и не надо)
    EXTINT = 0x0f;          // сброс текущих флагов
    VPBDIV = 0x01;          // окончательное значение (можно изменить на другое)

    VICProtection = 0;
    VICIntEnClear = -1UL;
    VICSoftIntClear = -1UL;
//    VICDefVectAddr = (unsigned long)&DefDummyInterrupt;
    VICVectAddr = 0;

    VICIntSelect &= ~(1 << VIC_EINT0);      // IRQ on EINT0
    VICVectAddr3 = (unsigned long)&EInt0Interrupt;
    VICVectCntl3 = 0x20 | VIC_EINT0;
    VICIntEnable = (1 << VIC_EINT0);

    __enable_interrupt();


С EINTx есть ещё некоторые тонкости. Настройки для EINTx не всегда устанавливаются. Поищите по форуму. zltigo обнаруживал кое-что, чего нет даже в мануале.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
Папа Карло
сообщение Jun 5 2008, 21:05
Сообщение #3


Частый гость
**

Группа: Новичок
Сообщений: 176
Регистрация: 15-02-08
Из: Москва
Пользователь №: 35 074



Настроил вот так:
Код
//EXTINT3
  EXTINT = 8;
  VPBDIV = 0x00;          //
  EXTMODE = 0x08;         //
  VPBDIV = 0x08;          //
  VPBDIV = 0x00;          //
  EXTPOLAR = 0x08;        //
  VPBDIV = 0x08;          //
  VPBDIV = 0x00;          //
  EXTINT = 0x08;          //
  VPBDIV = 0x00;          //


Но прерывание срабатывает только по фронту с 0 на 1, а наоборот не реагирует.
Может я что то упустил ?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 5 2008, 21:23
Сообщение #4


Гуру
******

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



Цитата(Папа Карло @ Jun 5 2008, 23:05) *
Может я что то упустил ?

Напротив, почему-то нафантазировали, что прерывания от какой-то сырости должны возникать одновременно по обоим фронтам. Можете выбрать один из двух вариантов, или перепрограммировать после каждого из прерываний rising/falling-edge режимы.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jun 5 2008, 21:32
Сообщение #5


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Я там опечатался. После записи в EXTPOLAR = 0x0f; нужно писать в VPBDIV = 0x0f; (то же значение) а не 0x00 как я написал. Это если вдруг кто тупо скопирует тот код.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 6 2008, 05:39
Сообщение #6


Гуру
******

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



Цитата(GetSmart @ Jun 5 2008, 23:32) *
Я там опечатался

Все эти пляски + дополнительные не ератированные были актуальны для чипов до LPC213x Для свежих errata нет. Хотя я без плясок не пробовал smile.gif - привычка и наличие некоторого количества LPC211x/221x для поддержки..


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Папа Карло
сообщение Jun 6 2008, 16:27
Сообщение #7


Частый гость
**

Группа: Новичок
Сообщений: 176
Регистрация: 15-02-08
Из: Москва
Пользователь №: 35 074



Цитата(zltigo @ Jun 6 2008, 01:23) *
нафантазировали


Блин, какой облом.
Ну придётся перепрограммировать ...
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 6 2008, 17:20
Сообщение #8


Гуру
******

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



Цитата(Папа Карло @ Jun 6 2008, 18:27) *
Блин, какой облом.

Облом был-бы если-бы было так, как Вам хотелось, а так это абсолютно нормальное поведение контроллеров прерываний.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

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

 


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


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