Например TDA7294

Форум РадиоКот • Просмотр темы - Не работает прерывание
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пт янв 02, 2026 11:31:45

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Не работает прерывание
СообщениеДобавлено: Чт янв 16, 2014 19:52:38 
Встал на лапы

Карма: -4
Рейтинг сообщений: -5
Зарегистрирован: Ср авг 14, 2013 12:35:24
Сообщений: 120
Рейтинг сообщения: 0
Собсно почему?
Спойлер
Код:
#include "stm32f10x_rcc.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_exti.h"
#include "misc.h"
#include "stm32f10x.h"

void EXTI0_IRQHandler(void)
{
   GPIO_SetBits(GPIOC, GPIO_Pin_9);
}

int main(void)
{
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

   GPIO_InitTypeDef gpio;
   gpio.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;
   gpio.GPIO_Speed = GPIO_Speed_2MHz;
   gpio.GPIO_Mode = GPIO_Mode_Out_PP;
   GPIO_Init(GPIOC, &gpio);

   GPIO_InitTypeDef gpio2;
   gpio2.GPIO_Pin = GPIO_Pin_0;
   gpio2.GPIO_Speed = GPIO_Speed_2MHz;
   gpio2.GPIO_Mode = GPIO_Mode_IN_FLOATING;
   GPIO_Init(GPIOA, &gpio2);

   EXTI_InitTypeDef exti;
   exti.EXTI_Line = EXTI_Line0;
   exti.EXTI_Trigger = EXTI_Trigger_Rising;
   exti.EXTI_Mode = EXTI_Mode_Interrupt;
   exti.EXTI_LineCmd = ENABLE;
   EXTI_Init(&exti);

   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);

   NVIC_InitTypeDef nvic;
   nvic.NVIC_IRQChannel = EXTI0_IRQn;
   nvic.NVIC_IRQChannelPreemptionPriority = 0;
   nvic.NVIC_IRQChannelSubPriority = 0;
   nvic.NVIC_IRQChannelCmd = ENABLE;
   NVIC_Init(&nvic);


   GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);
}



Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Не работает прерывание
СообщениеДобавлено: Ср июл 09, 2014 19:22:48 
Потрогал лапой паяльник
Аватар пользователя

Карма: 19
Рейтинг сообщений: 8
Зарегистрирован: Чт окт 31, 2013 10:54:32
Сообщений: 384
Рейтинг сообщения: 0
NVIC_EnableIRQ(EXTI0_IRQn); а разрешать кто будет прерывание?

настройка кнопки на прерывание:

Код:
void button_init()
{
   EXTI_InitTypeDef EXTI_InitStructure;
   NVIC_InitTypeDef NVIC_InitStructure;

   GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);
   EXTI_InitStructure.EXTI_Line = EXTI_Line0;
   EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
   EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
   EXTI_InitStructure.EXTI_LineCmd = ENABLE;
   EXTI_Init(&EXTI_InitStructure);

   NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQHandler();
   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
   NVIC_Init(&NVIC_InitStructure);
   NVIC_EnableIRQ(EXTI0_IRQn);
}


обработка прерывания:

Код:
void EXTI0_IRQHandler(void)
{
   if(EXTI_GetITStatus(EXTI_Line0) != RESET)
   {
      GPIO_Write(GPIOC, GPIO_ReadInputData(GPIOC) ^ LED_BLUE);
   }
   EXTI_ClearFlag(EXTI_Line0);
}


Последний раз редактировалось ibiza11 Ср июл 09, 2014 19:50:28, всего редактировалось 1 раз.
2.2 Запрещается создание нескольких сообщений подряд в одной теме. Если вы хотите что-то добавить к своему, уже написанному сообщению, воспользуйтесь кнопкой "Правка".


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y