STM32L100C6 не работает прерывание

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 394
Зарегистрирован: Сб апр 28, 2012 16:04:14

Сообщение sx386 »

Контроллер STM32L100C6
IAR 6.50.3

Создал проект.
Подключил CMSIS

Добавил файл с векторами прерываний startup_stm32l1xx_md.s и system_stm32l1xx.c
Да и всё поподключал что было в папке CMSIS.

Прерывание срабатывает, но не переходит в функцию.

Инициализация:

Код: Выделить всё

 // настройка линии на вход
  GPIOA->MODER &= ~GPIO_MODER_MODER0;  // вход
  GPIOA->OTYPER &= ~GPIO_OTYPER_OT_0;  // Output push-pull
  GPIOA->OSPEEDR |=GPIO_OSPEEDER_OSPEEDR0;  // частота 40 MHz
  GPIOA->PUPDR &=~GPIO_PUPDR_PUPDR0;  // подтягивающие резисторы отключены
 
  // настройка внешнего прерывания на int0
  RCC->APB2ENR |= RCC_APB2ENR_SYSCFGEN;
  
  // подключение к линии EXTI 0
  SYSCFG->EXTICR[0] |= SYSCFG_EXTICR1_EXTI0_PA; 
  
  EXTI->IMR |= EXTI_IMR_MR0; 
  EXTI->RTSR |= EXTI_RTSR_TR0; // срабатывание по снижению
  NVIC_SetPriority(EXTI0_IRQn, 1); // приоритет прерывания
  NVIC_EnableIRQ(EXTI0_IRQn); // разрешение прерывания EXTI0
Обработчик прерывания:

Код: Выделить всё

void EXTI0_IRQHandler (void) { 

  // фонарик
  Flashlight_POWER_H;  // питание фонарика
  Flashlight_H;  // яркость фонарика
  
  EXTI->PR |= EXTI_PR_PR0; // сбросить флаг прерывания
}
Зависает вот на этом:
Изображение

Не могу понять в чём проблема.
Может кто знает что это или как найти проблему ?
Критикуешь - предлагай. Предлагаешь - делай. Делаешь - отвечай.
Реклама
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

Сообщение ut1wpr »

Круто!
JTAG уже вам отключили.
http://radiokot.ru/forum/viewtopic.php?f=59&t=100613
Теперь вам интеррапты надо включать?
Что на очереди? А сами не пробовали?
Вам уже советовали, читать и читать. Читали?
Наводка:
1. Куда вы попадаете по прерыванию?
2. Что это за вектор?
3. Какой вектор нужен вам?
4. За каким.. вас в плюсы понесло?
С уважением,
Виктор.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

sx386, потому, что надо было додуматься же - создать проект для плюсов .
Вам что слово нравится? Или наобум тыкаетесь ???? :)))
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 394
Зарегистрирован: Сб апр 28, 2012 16:04:14

Сообщение sx386 »

Прочитал и даташит и статьи !!!

Но трудно понять написанное, если не знаешь языка, на котром всё написано.
Да и отсутствие образования по электронике тоже не помогает.
И отсутствие образования программирования тоже не добавляет оптимизма.

Но почему то все думают что я просто ленюсь....
ut1wpr писал(а):Круто!
JTAG уже вам отключили.
http://radiokot.ru/forum/viewtopic.php?f=59&t=100613
Теперь вам интеррапты надо включать?
Что на очереди? А сами не пробовали?
Что на очереди, Вы знаете ! У Вас есть список. :) Воспринимайте эту строку как шутку. Но в каждой щутке есть доля истины.

"Интеррапт" включено (см. код выше):

Код: Выделить всё

 NVIC_EnableIRQ(EXTI0_IRQn); 
Я, кстати сам настроил прерывание ! Но что-то пошло не так....

-

1. Попадаю в модуль startup_stm32l1xx_md. Контроллер останавливается при попытке перейти на прерывание.
2. Вектор прерывания - это указатель на адрес расположения инструкций, которые должны быть выполнены при вызове данного прерывания.
3. Мне не нужен вектор. Я просто не понимаю почему не работает.
4. "Плюсы" ? Что это ?
Критикуешь - предлагай. Предлагаешь - делай. Делаешь - отвечай.
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

sx386 писал(а): 4. "Плюсы" ? Что это ?
C++ . Переделывайте проект под просто С , точней заново создавайте ...
Реклама
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 394
Зарегистрирован: Сб апр 28, 2012 16:04:14

Сообщение sx386 »

Спасибо ! Работает.
Кто ж мог подумать ... Я думал что можно любой язык выбрать ... вот и выбрал с++
Критикуешь - предлагай. Предлагаешь - делай. Делаешь - отвечай.
Реклама
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

Сообщение ut1wpr »

sx386 писал(а):Но трудно понять написанное, если не знаешь языка, на котром всё написано.
Да и отсутствие образования по электронике тоже не помогает.
И отсутствие образования программирования тоже не добавляет оптимизма.
Но почему то все думают что я просто ленюсь....
Нет, я так не думаю. Я вижу, что у вас нарушена очередность действий. Для начала нужно хотя бы частично ликвидировать то, что вы сейчас перечислили.
1. Попадаю в модуль startup_stm32l1xx_md. Контроллер останавливается при попытке перейти на прерывание.
2. Вектор прерывания - это указатель на адрес расположения инструкций, которые должны быть выполнены при вызове данного прерывания.
3. Мне не нужен вектор. Я просто не понимаю почему не работает.
4. "Плюсы" ? Что это ?
Пункт 3 и 4 улыбнули. Понимание придет, когда станет нужным вектор. Если не знаете, куда вас заносит в прерываниях - как жить дальше? :)
Ну а про Плюсы вы уже вроде поняли.
С уважением,
Виктор.
Собутыльник Кота
Аватара пользователя
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев

Сообщение BCluster »

dosikus писал(а):C++ . Переделывайте проект под просто С , точней заново создавайте ...
а в чем причина, почему на С++ у товарища не работает?
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

В плюсах надо описывать обработчик как

Код: Выделить всё

extern "С"
.
Но здесь плюсы были выбраны наобум... :)))
Собутыльник Кота
Аватара пользователя
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев

Сообщение BCluster »

Ясно :)
Контактная информация:
Ответить

Вернуться в «ARM»