Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: прерывание от P1 и P2
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
CAHTA_1939
имеются 2 шт msp430f1611. соединяю пин Р2.6 первой с Р2.6 второй микрухи и вешаю на нее прерывание(у второй микрухи).

в первой , которая должна "вызывать прерывание" у второго, я вставил код.

Код
P2OUT = 0x00;
P2DIR = BIT6;

P2OUT = BIT6;
_NOP();
P2OUT = 0x00;


а во второй, у которой должно срабатывать прерывание...

Код
P2IN  = 0x00;   //
P2DIR = 0x00;   //                                                             // все ножки на ввода информации
P2IES = 0x00;   //                                                             // фронт...с низкого на высокий
P2IE  = BIT6;   //                                                             // разрешения прерывание от P2.6
P2SEL = 0x00;   //                                                             // выбрана функция ввода\вывода

#pragma vector = PORT2_VECTOR
__interrupt void _port2_int_(void)
{
   P2IFG = 0x00;  // снятие флага запуска прерывания

   P1OUT = 0х01;
}


на Р1.1 у меня весит светодиод. вот только он не загорается.
подскажите плиз в чем я накосячел?
Oleg Galizin
Я столкнулся с тем что порядок настройки регистров тоже имеет значение.
Сделал установку всех битов в беспорядке - прерывание не генерировалось.
Скопировал с примеров - все работает как часы. Примеры от gcc. В одном из них есть
работа по прерыванию от порта.
Такое впечатление что P2IE должен устанавливаться в последнюю очередь, что бы генерировалось прерывание.
a1ex
второй МК как мининмум не успевает иницализировать порты. Прежде чем подовать на P2.6 high не помешает задержка.. кажись.
CAHTA_1939
Цитата(a1ex @ Dec 3 2007, 20:09) *
второй МК как мининмум не успевает иницализировать порты. Прежде чем подовать на P2.6 high не помешает задержка.. кажись.


да пробовал и задержку. а точнее я делал следующее. включал первый, потом включал втокой контроллер и первый перезагружал... и нифига =(

да и обычным фором задержку тоже делал... ну ни как не хочет =(

усе. нашел СВОЮ ошибку. когда изменял код. случайно удалил команду _EINT();

=)
msalov
Цитата(Oleg Galizin @ Dec 3 2007, 18:03) *
Такое впечатление что P2IE должен устанавливаться в последнюю очередь, что бы генерировалось прерывание.

Вообще логично сначала настроить прерывание, а только потом его разрешать
shkirenko
в пиборе применял приривание

http://www.stripdetector.by.ru/dosimaters_radiometers.html



P1DIR=0x00; // set pins P1.1...P1.5 for INPUT
P1IES=0xBF; // переход из 1 в 0 вызовет прерывание
P1SEL=0x00;
P1IFG=0xFF;
P1IE=0xFF;//3E; // interrupt P1 enable for INPUT P1





#pragma vector=PORT1_VECTOR
__interrupt void PORT1(void)
{
switch( P1IFG )
{
case 1: {KK=1;break;} // P1.0
case 2: {KK=2;break;} // P1.1 G
case 4: {KK=4;break;} // P1.2
case 8: {KK=8;break;} // P1.3 B
case 16: {KK=16;break;} // P1.4
case 32: {KK=32;break;} // P1.5 A
case 64: {KK=64;break;} // P1.6
case 128:{KK=128;break;} // P1.7
default: break;
}
P1IFG=0x00;
}
М430
Цитата(CAHTA_1939 @ Dec 3 2007, 17:44) *
имеются 2 шт msp430f1611. соединяю пин Р2.6 первой с Р2.6 второй микрухи и вешаю на нее прерывание(у второй микрухи).

в первой , которая должна "вызывать прерывание" у второго, я вставил код.

Код
P2OUT = 0x00;
P2DIR = BIT6;

P2OUT = BIT6;
_NOP();
P2OUT = 0x00;


а во второй, у которой должно срабатывать прерывание...

Код
P2IN  = 0x00;   //
P2DIR = 0x00;   //                                                             // все ножки на ввода информации
P2IES = 0x00;   //                                                             // фронт...с низкого на высокий
P2IE  = BIT6;   //                                                             // разрешения прерывание от P2.6
P2SEL = 0x00;   //                                                             // выбрана функция ввода\вывода

#pragma vector = PORT2_VECTOR
__interrupt void _port2_int_(void)
{
   P2IFG = 0x00;  // снятие флага запуска прерывания

   P1OUT = 0х01;
}


на Р1.1 у меня весит светодиод. вот только он не загорается.
подскажите плиз в чем я накосячел?



Удивительно, как у тебя все заработало даже после того, как ты нашел свое EINT().
По-идее если ты хочешь чтобы на P1.1 выдавался сигнал, то надо делать P1OUT = 0х02, иначе дергаться будет P1.0
CAHTA_1939
Цитата(М430 @ Jan 28 2008, 14:03) *
Удивительно, как у тебя все заработало даже после того, как ты нашел свое EINT().
По-идее если ты хочешь чтобы на P1.1 выдавался сигнал, то надо делать P1OUT = 0х02, иначе дергаться будет P1.0


все нормально работает. я наверное просто ошибся... светодио у меня висел на Р1.0 , видимо. схема разобранна. так что не посмотреть
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.