1 / 1 / 0
Регистрация: 28.01.2021
Сообщений: 82
1

Таймер в миландр ldm-k1986BE1QI

10.07.2024, 08:24. Показов 260. Ответов 3

Author24 — интернет-сервис помощи студентам
Приветствую!
Помогите разобраться с работай таймера на контроллере миландр ldm-k1986BE1QI.
Нужно заменить функцию Delay.
Я создала timer.c , не знаю правильно мыслю или нет
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include "timer.h"
void tmr1_Init(void)
{
    MDR_RST_CLK->TIM_CLOCK |= 0x07000000;
    //режим инициализации
    MDR_TIMER1->CNTRL = 0;
    //начало счета
    MDR_TIMER1->CNT = 0;
    //предделитель
    MDR_TIMER1->PSG = 0;
    //конец счета
    //для внешнего кварца на 16мгц, PLL = 5 (80 МГц) и получения времени 20мс
    MDR_TIMER1->ARR = 80000000*20/1000 - 1; 
    //прерывание при CNT == ARR
    MDR_TIMER1->IE |= TIMER_IE_CNT_ARR_EVENT_IE;
        //счет вверх по TIM_CLK
    MDR_TIMER1->CNTRL |= TIMER_CNTRL_CNT_EN;
    MDR_RST_CLK->TIM_CLOCK |= RST_CLK_TIM_CLOCK_TIM1_CLK_EN;
    
    NVIC_SetPriority (TIMER1_IRQn, 2); // Приоритет прерывания
    NVIC_EnableIRQ(TIMER1_IRQn); //включение прерывания от таймера_1 ?????
}
 
void tmr2_Init(void)
{
    MDR_RST_CLK->TIM_CLOCK |= 0x07000000;
    //режим инициализации
    MDR_TIMER2->CNTRL = 0;
    //начало счета
    MDR_TIMER2->CNT = 0;
    //предделитель
    MDR_TIMER2->PSG = 0;
    //конец счета
    //для внешнего кварца на 16мгц, PLL = 5 (80 МГц) и получения времени 1мс
    MDR_TIMER2->ARR = 80000000/1000 - 1; 
    //прерывание при CNT == ARR
    MDR_TIMER2->IE |= TIMER_IE_CNT_ARR_EVENT_IE;
        //счет вверх по TIM_CLK
    MDR_TIMER2->CNTRL |= TIMER_CNTRL_CNT_EN;
    MDR_RST_CLK->TIM_CLOCK |= RST_CLK_TIM_CLOCK_TIM2_CLK_EN;
    
    NVIC_SetPriority (TIMER2_IRQn, 1); // Приоритет прерывания
    NVIC_EnableIRQ(TIMER2_IRQn);
}
И timer.h
C
1
2
3
4
5
6
#ifndef __TMR_H__
#define __TMR_H__
#include <MDR32FxQI_timer.h>
    void tmr1_Init(void);
    void tmr2_Init(void);
#endif


Теперь нужно реализовать это всё в main, который выглядит так
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include "clk.h"
#include "led.h"
#include "button.h"
#include "timer.h"
 
void Delay(uint32_t ticks);
 
int main(void)
{
    clk_CoreConfig();
    led_Init();
    button_Init();
    uint8_t curr=0;
    tmr1_Init();
    tmr2_Init();
    
      while(1){
            
         if(read_button_state(&Button_Up)&&curr!=15)    {
           curr++;
           writeLedNum(curr);
         Delay(4000000);
            
        }
        if(read_button_state(&Button_Down)&&curr!=0){   
           curr--;
           writeLedNum(curr);
           Delay(4000000);  
        }
    
    }//off while
}//off main
 
    void Delay(uint32_t ticks)
{
for(uint32_t i=0; i < ticks; ++i)
            __NOP();
}
Здесь у меня уже проблема, получается Delay мы убираем? И как вместо него реализовать таймер?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.07.2024, 08:24
Ответы с готовыми решениями:

Подключение FreeRTOS к 1986ВЕ1Т (плата LDM-uROB-K1986BE1QI)
Подскажите, пожалуйста, как подключить библиотеку FreeRTOS. Делаю по этому руководству...

Оценка качества системы LDM
задание: На примере речевого сигнала – слова “Matlab” из библиотеки Matlab – продемонстрируем, как...

Миландр 1986ВЕ2
Начал изучать полученный недавно образец МК Милиндр 1986ВЕ2. Удалось достучаться до UART...

Микроконтроллеры Миландр
Здравствуйте, стоит задача перейти на отечественные микроконтроллеры. Нужна библиотека proteus...

ST-Link и миландр
Коллеги, кто-нибудь пробовал подключаться в Милиндровским 1986ВЕ1Т с помощью ST-Linrf или других...

3
Эксперт по компьютерным сетямЭксперт NIX
13312 / 7451 / 812
Регистрация: 09.09.2009
Сообщений: 29,138
10.07.2024, 12:58 2
Цитата Сообщение от BelkaMatilda Посмотреть сообщение
Delay мы убираем? И как вместо него реализовать таймер?
"глобально" - обычно делают так, что таймер выставляет флаг срабатывания (переполнения), а основной цикл проверяет наличие этого флага, и если есть, то выполняет действия, которые должны были произойти после задержки, после чего сбрасывает флаг таймера
0
1 / 1 / 0
Регистрация: 28.01.2021
Сообщений: 82
12.07.2024, 09:44  [ТС] 3
Обработчик прерывания сделала
C
1
2
3
4
void tmr1_IRQHandler(void)
{
MDR_TIMER1->STATUS=0;
}
Получается нужно флаг нужно на каждую кнопку и светодиод?
C
1
2
#define Down_Flag 
#define Up_Flag
И так далее....
0
Эксперт по компьютерным сетямЭксперт NIX
13312 / 7451 / 812
Регистрация: 09.09.2009
Сообщений: 29,138
12.07.2024, 12:22 4
  • какая задача стоит у вашего кода - мне не известно
  • продумайте сам алгоритм вашей программы в плане того, что раз в какой-то интервал вы будете получать один флаг типа "прошло ХХ (милли/микро)секунд". и вот по получению этого флага и обрабатывайте все остальные ваши события и хотелки
0
12.07.2024, 12:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.07.2024, 12:22
Помогаю со студенческими работами здесь

Пользовательский бутлоадер Миландр
Дорогие форумчане! Возник вопрос по 1986ве91т, при передаче управления из бутлоадера в программу,...

Миландр и модуль энкодера
Народ, не в курсе, есть ли у Милиндра контроллеры с аппаратной обработкой энкодера?

IP/TCP стэк на Миландр 1986ВЕ91Т
Доброго времени суток! Пытаюсь реализовать простейшее клиент-серверное приложение работающее...

Как прошить Миландр нестандартно?
После работы с микроконтроллером STM32 появилось желание изучить микроконтроллер K1986BE91T. Но...

Подключение АЦП в 1986ВЕ91Т Миландр (внешний сигнал)
Отладочная плата с микроконтроллером 1986ВЕ91Т. Среда программирования - Keil. Появилась задача...

Код на Си, для переключения светодиодов кнопками на микрокотроллере миландр
Приветствую. Помогите пжлс с написанием кода на Си, keil. Микроконтроллер миландр LDM-K1986BE1QI....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru