Код
#include <stm8s105c6.h> //Бибилиотека описаний периферии
//#include <intrins.h>
#include <intrist7.h>
#define enableInterrupts() _rim_() /* enable interrupts */
#define disableInterrupts() _sim_() /* disable interrupts */
unsigned char a,b,c,Timer4;
void TIM4_UPD_OVF_IRQHandler(void) interrupt 23 //обработчик прерывания по таймеру 4
{
TIM4_SR &= ~(1<<0); //Сбросим признак прерывания
if(Timer4) Timer4--; //Программный таймер
}
void Timer4_1ms_set (void) //инициализация таймера
{
TIM4_SR &= ~(1<<0); //Сбросим признак прерывания
TIM4_PSCR=0x07; //Предделитель на 2^7=128 16000000/128 = 125000 Hz
TIM4_ARR=125; //Регистр автозагрузки таймера при переполнении 125000 / 250 = 500 Hz
TIM4_IER |= (1<<0); //Разрешаем генерацию прерывания при переполнеини
CLK_PCKENR1 |= (1<<4); //Подключаем тактовый генератор к таймеру 4
TIM4_CR1 |= (1<<0); //Разрешаем счет
}
_rim_(); //разрешить глобально прерывания
//#include <intrins.h>
#include <intrist7.h>
#define enableInterrupts() _rim_() /* enable interrupts */
#define disableInterrupts() _sim_() /* disable interrupts */
unsigned char a,b,c,Timer4;
void TIM4_UPD_OVF_IRQHandler(void) interrupt 23 //обработчик прерывания по таймеру 4
{
TIM4_SR &= ~(1<<0); //Сбросим признак прерывания
if(Timer4) Timer4--; //Программный таймер
}
void Timer4_1ms_set (void) //инициализация таймера
{
TIM4_SR &= ~(1<<0); //Сбросим признак прерывания
TIM4_PSCR=0x07; //Предделитель на 2^7=128 16000000/128 = 125000 Hz
TIM4_ARR=125; //Регистр автозагрузки таймера при переполнении 125000 / 250 = 500 Hz
TIM4_IER |= (1<<0); //Разрешаем генерацию прерывания при переполнеини
CLK_PCKENR1 |= (1<<4); //Подключаем тактовый генератор к таймеру 4
TIM4_CR1 |= (1<<0); //Разрешаем счет
}
_rim_(); //разрешить глобально прерывания
В отладчике видно, что флаг прерывания устанавливается, но обработчик не выполняется. В чем может быть причина? Спасибо.