Например TDA7294

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

Текущее время: Чт дек 25, 2025 07:12:13

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


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



Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Прерывание по TIM1 update
СообщениеДобавлено: Ср дек 25, 2013 17:42:23 
Открыл глаза

Зарегистрирован: Ср май 28, 2008 14:33:11
Сообщений: 67
Откуда: Россия, Саров
Рейтинг сообщения: 0
Привет! Здесь снова Карась.

Есть плата STM32F4Discovery.
Есть вот такой код:

Код:
#include "stm32f4xx.h"
#include "system_stm32f4xx.h"

void TIM1_UP_TIM10_IRQHandler(void)
{
    TIM1->SR &= ~TIM_SR_UIF;
     GPIOD->ODR ^= 0x4000;
}

int main(void)
{
     RCC->AHB1ENR |= RCC_AHB1ENR_GPIODEN;
     GPIOD->MODER |= GPIO_MODER_MODER15_0 | GPIO_MODER_MODER14_0;
     GPIOD->OTYPER  &= ~(GPIO_OTYPER_OT_15 | GPIO_OTYPER_OT_14);
     GPIOD->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR15 | GPIO_OSPEEDER_OSPEEDR14);

    NVIC_EnableIRQ(TIM1_UP_TIM10_IRQn);
    __enable_irq();
   
     RCC->APB2ENR |= RCC_APB2ENR_TIM1EN;
     TIM1->DIER &= ~TIM_DIER_UIE;
     TIM1->ARR = 42000;
    TIM1->PSC = 3000;
    TIM1->CNT = 0;
    TIM1->CR1 &= ~ TIM_CR1_UDIS;
    TIM1->CR1 |= TIM_CR1_URS | TIM_CR1_CEN;   

     GPIOD->ODR |= 0x8000;
   
     for(;;){
     }
}




По замыслу синий светодиод на PD15 должен гореть постоянно, а красный на PD14 переключаться в обработчике прерывания по событию TIM1 update, т.е. мигать.
На деле получается вот что: по прерыванию светодиод на PD15 не горит вообще, однако, если не использовать прерывание, а вместо этого отлавливать установку флага TIM_SR_UIF в основном цикле и там же переключать пин PD15 и сбрасывать флагTIM_SR_UIF, то всё нормально - светодиод мигает.
Отсюда вывод: похоже, что я вообще не попадаю в обработчик прерывания. Вопрос - почему? Подозреваю, что причина в какой-нибудь глупой нубовской ошибке - ведь я только начинаю осваивать платформу STM32. Так, что прошу помочь и сильно не ругать.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прерывание по TIM1 update
СообщениеДобавлено: Ср дек 25, 2013 18:01:46 
Открыл глаза

Зарегистрирован: Ср май 28, 2008 14:33:11
Сообщений: 67
Откуда: Россия, Саров
Рейтинг сообщения: 0
Нашёл ошибку. Она была допущена по элементарной невнимательности. Всё дело было вот в этой строчке:
Код:
TIM1->DIER &= ~TIM_DIER_UIE

Здесь запрещается прерывание, а должно разрешаться. Правильно будет так:
Код:
TIM1->DIER |= TIM_DIER_UIE

Просто забыл исправить строчку после того, как экспериментировал без использования прерывания.


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

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


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

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


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

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


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