Я использую stm8l - обнаружение, и я создал код для переключения светодиода на каждую 1 секунду, используя таймер (TIM1), но это не работает должным образом.Я что-то упустил здесь в моей конфигурации
Я мог войти в функцию прерывания в первый раз, но после этого она не входит в функцию прерывания.Кто-нибудь, пожалуйста, посмотрите и помогите мне
enter code here
#include <iostm8l.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "defs.h"
unsigned int count = 0;
@svlreg @interrupt void TIM1(void)
{
count += 1;
TIM1_SR1 &= ~(0x01);
}
main()
{
CLK_DIVR = 0x00; // Set the frequency to 16Mhz
CLK_PCKENR2 = 0x02; // clock for timer1
PC_DDR = 0x80; // direction output for led
PC_CR1 = 0x80; // fast push pull mode
PE_DDR = 0x80; // direction output for led
PE_CR1 = 0x80; // fast push pull mode
TIM1_PSCRH = 0x3e; //to create a frequency for 1000 hz
TIM1_PSCRL = 0x80; // so prescalar is 16000
TIM1_CR1 = 0x01;
TIM1_IER = 0x01;
_asm("rim\n");
while(1)
{
if (count == 1000)
{
PE_ODR ^= 0x80;
count = 0;
}
}
}
Прерывание входит только один раз, но после этого оно не входит.Таким образом, переменная "count" остается в значении 1