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

 
 
 
Reply to this topicStart new topic
> прерывание от P1 и P2
CAHTA_1939
сообщение Dec 3 2007, 15:44
Сообщение #1


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

Группа: Участник
Сообщений: 142
Регистрация: 11-08-07
Пользователь №: 29 713



имеются 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 у меня весит светодиод. вот только он не загорается.
подскажите плиз в чем я накосячел?
Go to the top of the page
 
+Quote Post
Oleg Galizin
сообщение Dec 3 2007, 16:03
Сообщение #2





Группа: Участник
Сообщений: 14
Регистрация: 25-03-07
Пользователь №: 26 499



Я столкнулся с тем что порядок настройки регистров тоже имеет значение.
Сделал установку всех битов в беспорядке - прерывание не генерировалось.
Скопировал с примеров - все работает как часы. Примеры от gcc. В одном из них есть
работа по прерыванию от порта.
Такое впечатление что P2IE должен устанавливаться в последнюю очередь, что бы генерировалось прерывание.
Go to the top of the page
 
+Quote Post
a1ex
сообщение Dec 3 2007, 17:09
Сообщение #3





Группа: Новичок
Сообщений: 13
Регистрация: 29-11-07
Из: Jurmala
Пользователь №: 32 821



второй МК как мининмум не успевает иницализировать порты. Прежде чем подовать на P2.6 high не помешает задержка.. кажись.
Go to the top of the page
 
+Quote Post
CAHTA_1939
сообщение Dec 3 2007, 20:52
Сообщение #4


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

Группа: Участник
Сообщений: 142
Регистрация: 11-08-07
Пользователь №: 29 713



Цитата(a1ex @ Dec 3 2007, 20:09) *
второй МК как мининмум не успевает иницализировать порты. Прежде чем подовать на P2.6 high не помешает задержка.. кажись.


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

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

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

=)
Go to the top of the page
 
+Quote Post
msalov
сообщение Dec 4 2007, 11:26
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 24-08-07
Из: Беларусь, Минск
Пользователь №: 30 045



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

Вообще логично сначала настроить прерывание, а только потом его разрешать
Go to the top of the page
 
+Quote Post
shkirenko
сообщение Jan 28 2008, 09:32
Сообщение #6





Группа: Новичок
Сообщений: 8
Регистрация: 28-01-08
Пользователь №: 34 489



в пиборе применял приривание

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;
}


--------------------
Go to the top of the page
 
+Quote Post
М430
сообщение Jan 28 2008, 11:03
Сообщение #7





Группа: Участник
Сообщений: 14
Регистрация: 23-01-08
Пользователь №: 34 349



Цитата(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
Go to the top of the page
 
+Quote Post
CAHTA_1939
сообщение Jan 28 2008, 18:38
Сообщение #8


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

Группа: Участник
Сообщений: 142
Регистрация: 11-08-07
Пользователь №: 29 713



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


все нормально работает. я наверное просто ошибся... светодио у меня висел на Р1.0 , видимо. схема разобранна. так что не посмотреть
Go to the top of the page
 
+Quote Post

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

 


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


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