Использую процессор STM32F101V8 и среду разработки IAR. Требуется помощь при работе с прерываниями.
Имеется вот такой код:
Код: Выделить всё
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
void SystemInit(void)
{
}
// Обработка прерывания
void TIM6_DAC_IRQHandler(void)
{
TIM6->SR &= ~TIM_SR_UIF; //сбросили флаг
GPIOD->ODR^=GPIO_Pin_4; //Инвертируем состояние светодиода
}
int main()
{
GPIO_InitTypeDef PORT;
//Тактируем порт и таймер
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD , ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6,ENABLE);
//Настраиваем порт
PORT.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5;
PORT.GPIO_Mode = GPIO_Mode_Out_PP;
PORT.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(GPIOD, &PORT);
TIM6->PSC = 8000 - 1; // настраиваем делитель на 1000 тиков в секунду
TIM6->ARR = 1000 ; // Прерывание раз в секунду
TIM6->DIER |= TIM_DIER_UIE; //Разрешаем прерывание от таймера
TIM6->CR1 |= TIM_CR1_CEN; // Начинаем отсчет
NVIC_EnableIRQ(TIM6_DAC_IRQn); //Разрешаем TIM6_DAC_IRQn прерывания
__enable_irq();
while(1)
{
//Ничего не делаем, ждем прерывания
}
}
Проблема в том, что на прерывание МК не реагирует, отсюда вопрос:
что-то не так в коде или это какая-то фишка IAR'а, так как я читал, что есть какие-то нюансы с его настройкой?
/summon SMT32_IAR_GURU
Заранее спасибо за помощь!