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

 
 
> LPC2478. Прерывания GPIO совместно с LCD.
Real_Bastard
сообщение May 1 2011, 21:52
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 39
Регистрация: 7-11-06
Из: Санкт-Петербург
Пользователь №: 22 041



Есть LPC2478 с подключенным TFT. Хочется запустить прерывание от GPIO. Но LCD контроллер постоянно вызывает мое прерывание!!!
Note: EINT3 channel is shared with GPIO interrupts, а ножка EINT3 используется LCD контроллером. (P2[13]/EINT3/LCDVD[5]/LCDVD[9]/LCDVD[19]/MCIDAT3/I2STX_SDA) . Т.е. как только я разрешаю прерывания от EINT3 оно срабатывает от посылки на TFT. Запуска прерывания от GPIO без разрешения прерываний от EINT3 не происходит. Что я делаю не так?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 4)
M_Andrey
сообщение May 2 2011, 15:04
Сообщение #2


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

Группа: Свой
Сообщений: 158
Регистрация: 15-10-07
Из: Й-Ола
Пользователь №: 31 376



Как-то так:

CODE
void GPIOINT(void)


{
VICADDRESS = 0;
if (IOINTSTATUS_bit.P0INT)
{
if (IO0INTSTATF_bit.P0_9)
{
//Falling edge
}
if (IO0INTSTATR_bit.P0_9)
{
//Rising edge
}
IO0INTCLR_bit.P0_9 = 1;
}
else
{
EXTINT = 0x08;
}
}

void initgpioint(void)
{
IO0INTENF_bit.P0_9 = 1; //Falling edge
IO0INTENR_bit.P0_9 = 1; //Rising edge
IO0INTCLR_bit.P0_9 = 1; //clears any interrupts
VICINTENCLEAR_bit.EINT3 = 1;
EXTINT = 0x08; //clears the corresponding bits
EXTMODE = 0;
VIC_SetVectoredIRQ(GPIOINT, 5, VIC_EINT3);
VICINTENABLE |= 1UL << VIC_EINT3;
}



Go to the top of the page
 
+Quote Post
ar__systems
сообщение May 3 2011, 13:24
Сообщение #3


self made
****

Группа: Свой
Сообщений: 855
Регистрация: 7-03-09
Из: Toronto, Canada
Пользователь №: 45 795



Цитата(Real_Bastard @ May 1 2011, 16:52) *
Есть LPC2478 с подключенным TFT. Хочется запустить прерывание от GPIO. Но LCD контроллер постоянно вызывает мое прерывание!!!
Note: EINT3 channel is shared with GPIO interrupts, а ножка EINT3 используется LCD контроллером. (P2[13]/EINT3/LCDVD[5]/LCDVD[9]/LCDVD[19]/MCIDAT3/I2STX_SDA) . Т.е. как только я разрешаю прерывания от EINT3 оно срабатывает от посылки на TFT. Запуска прерывания от GPIO без разрешения прерываний от EINT3 не происходит. Что я делаю не так?

Я что-то не пойму, у вас пин используется дисплеем, а вы при этом еще и прерывание от него хотите получать? Как-то странно. Функция пина в PINSEL какая у вас стоит?
Go to the top of the page
 
+Quote Post
M_Andrey
сообщение May 3 2011, 15:30
Сообщение #4


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

Группа: Свой
Сообщений: 158
Регистрация: 15-10-07
Из: Й-Ола
Пользователь №: 31 376



Фишка в том что прерывания от GPIO делят вектор с прерыванием от EINT3, и если просто его разрешить то первым делом сработает вызов именно от EINT3 даже если он и не был разрешен - сам с этим столкнулся. Поэтому его надо обязательно сбросить в обработчике командой EXTINT = 0x08 иначе прога повиснет на постоянном вызове этого прерывания.
Go to the top of the page
 
+Quote Post
Real_Bastard
сообщение May 3 2011, 18:56
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 39
Регистрация: 7-11-06
Из: Санкт-Петербург
Пользователь №: 22 041



ОГРОМНОЕ СПАСИБО!!!
Go to the top of the page
 
+Quote Post

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

 


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


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