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

 
 
> как на одно прерывание посадить ножки GPIO ?, На STM32
inventor
сообщение Feb 14 2012, 13:24
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



Подключаю к плате 3 АЦП и мне нужно чтобы одно прерывание обслуживало все три.
хочу проверить как ведут себя входы DRDY.
пытаюсь их конфигурировать и просто (пока не подключил АЦП) соединить вход с землей.
если их по очереди конфигурить - то все они работают, но не все одновременно.
если конфигурируешь 3 сразу то возникает лишь одно прерывание.
в чем загвоздка, подскажите!

CODE

RCC_APB2PeriphClockCmd(ADS1210_DRDY1_GPIO_CLK | ADS1210_DRDY2_GPIO_CLK | RCC_APB2Periph_AFIO, ENABLE);


/*!< Configure ADS1210_DRDY1_PIN pin: DRDY1 pin */
GPIO_InitStructure.GPIO_Pin = ADS1210_DRDY1_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; // или GPIO_Mode_IPU ?
GPIO_Init(ADS1210_DRDY1_GPIO_PORT, &GPIO_InitStructure);

/* Свяжем GPIO DRDY1 с линией EXTI1 */
GPIO_EXTILineConfig(ADS1210_DRDY1_EXTI_PORT_SOURCE, ADS1210_DRDY1_EXTI_PIN_SOURCE);
EXTI_InitStructure.EXTI_Line = ADS1210_DRDY1_EXTI_LINE;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);

/*!< Configure ADS1210_DRDY2_PIN pin: DRDY2 pin */
GPIO_InitStructure.GPIO_Pin = ADS1210_DRDY2_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; // или GPIO_Mode_IPU ?
GPIO_Init(ADS1210_DRDY2_GPIO_PORT, &GPIO_InitStructure);

/* Свяжем GPIO DRDY2 с линией EXTI1 */
GPIO_EXTILineConfig(ADS1210_DRDY2_EXTI_PORT_SOURCE, ADS1210_DRDY2_EXTI_PIN_SOURCE);
EXTI_InitStructure.EXTI_Line = ADS1210_DRDY2_EXTI_LINE;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);



обработчик выглядит примерно так:

CODE

void EXTI1_IRQHandler(void)
{
#if 0
if(EXTI_GetITStatus(ADS1210_DRDY1_EXTI_LINE) != RESET)
{
/* Toggle LED3 */
STM32vldiscovery_LEDToggle(LED3);

/* Clear EXTI line pending bit */
EXTI_ClearITPendingBit(ADS1210_DRDY1_EXTI_LINE);
}
#endif

if(EXTI_GetITStatus(ADS1210_DRDY2_EXTI_LINE) != RESET)
{
/* Toggle LED4 */
STM32vldiscovery_LEDToggle(LED4);

/* Clear EXTI line pending bit */
EXTI_ClearITPendingBit(ADS1210_DRDY2_EXTI_LINE);
}

}


ну и нвик я настраивал примерно так:

CODE

/* Enable and set Button EXTI Interrupt to the lowest priority */
NVIC_InitStructure.NVIC_IRQChannel = ADS1210_DRDY1_EXTI_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0f;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0f;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;



NVIC_InitStructure.NVIC_IRQChannel = ADS1210_DRDY2_EXTI_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0f;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0f;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;


NVIC_Init(&NVIC_InitStructure);


может у меня в настройке нвика ошибка, как мне EXTI поместить в обин обработчик?

входы DRDY a1 b1 c1 - типа чтоб на одно exti посадить.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 18th August 2025 - 14:14
Рейтинг@Mail.ru


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