Миландр
https://forum.milandr.ru/

не изменяются регистры TIMER1 при отладке
https://forum.milandr.ru/viewtopic.php?f=22&t=4032
Страница 1 из 1

Автор:  Дмитрий2019 [ 2019-апр-17 08:10 ]
Заголовок сообщения:  не изменяются регистры TIMER1 при отладке

Доброго времени суток участникам форума, продолжаю изучать микроконтроллер К1986ВЕ92QI (отладочная плата Миландр). Пробую настроить на выводе PF6 таймер 1 в режиме захвата. Работаю в Keil uVision5 версия 5.22. Библиотека 1986BE9x_StdPeriph_Driver (не MDR...) - не совсем ещё разбираюсь в правильности их названий. Написал код для инициализации таймера 1 в режиме захвата, но при отладке регистры таймера никак не меняются, они все равны 0. Перед этим оказалось, что в проекте не было файла 1986BE9x_timer.h и 1986BE9x_timer.c (файл "1986BE9x_timer_defs.h" был) и не компилировалось, добавил файлы, все скомпилировалось, возможно не совсем правильно это сделал, но keil не ругается. Подобной темы ни в интернете, ни на форуме не нашел, может у кого что-то подобное было. Перед этим настраивал SPI, UART, системный таймер, все работало.

Вложения:
[ attachment ]
для форума.JPG [ 274.52 КБ | 1707 просмотров ]

Автор:  ЧумА [ 2019-апр-17 09:28 ]
Заголовок сообщения:  Re: не изменяются регистры TIMER1 при отладке

Пример рабочий, до вызова нужно настроить тактирование таймера и функцию соответствующего таймеру вывода порта.
Для работы прерываний также отдельно требуется: NVIC_EnableIRQ(TimerX_IRQn) и при необходимости NVIC_SetPriority (TimerX_IRQn, TimerX_IRQ_PRIOR)
// --------------------------------------------------------------------------
// Настройка таймера в режиме захвата (прерывание по фронту и спаду)
// Таймер == MDR_TIMER1, MDR_TIMER2, MDR_TIMER3
// tmr_chanel = TIMER_CH1...TIMER_CH3 (0...2)
// psg == к-т предделителя
// arr == основание счета таймера (MAX == 0xFFFF)
// filtr == значение для CHFLTR [0..3] = 1, 2, 4, 8 TIM_CLC
// --------------------------------------------------------------------------
void Timer_asCapture_Setup(MDR_TIMER_TypeDef *MDR_TIMERx, u8 tmr_chanel, u16 psg, u16 arr, u8 inp_filtr)
{
MDR_TIMERx->CNTRL = 0;	// откл на время настройки
MDR_TIMERx->CNT = 0;	// сбросили счетчик
MDR_TIMERx->PSG = psg;	// предделитель частоты на входе CNT, Fcnt = TIM_CLK/(PSG+1)
MDR_TIMERx->ARR = arr;	// верхняя граница счета, CNTmax == ARR
MDR_TIMERx->CNTRL = TIMER_CNTRL_CNT_EN;	// счет вверх 0 -> ARR, 0 -> ARR...

//                                                                        режим CAPTURE                отрицательный фронт                            входной фильтр
*(&MDR_TIMERx->CH1_CNTRL + tmr_chanel) = TIMER_CH_CNTRL_CAP_NPWM | (1 << TIMER_CH_CNTRL_CHSEL_Pos) | (inp_filtr << TIMER_CH_CNTRL_CHFLTR_Pos);
//                                                                                          CCR1 разрешен                    положительный фронт
*(&MDR_TIMERx->CH1_CNTRL2 + tmr_chanel) = (1 << TIMER_CH_CNTRL2_CCR1_EN_Pos) | (0 << TIMER_CH_CNTRL2_CHSEL1_Pos);

//                                                        прерывание по CCR1                                                  прерывание по CCR
MDR_TIMERx->IE = ( (1 << tmr_chanel) << TIMER_IE_CCR1_CAP_EVENT_IE_Pos ) | ( (1 << tmr_chanel) << TIMER_IE_CCR_CAP_EVENT_IE_Pos ); 
MDR_TIMERx->STATUS = 0;
}

Автор:  редактор [ 2019-апр-17 09:58 ]
Заголовок сообщения:  Re: не изменяются регистры TIMER1 при отладке

Похоже, что не включено тактирование таймера (регистр RST_CLK->PER_CLOCK), поэтому вариант, предложеный ЧумА, скорее всего тоже не взлетит.

Автор:  Дмитрий2019 [ 2019-апр-17 17:26 ]
Заголовок сообщения:  Re: не изменяются регистры TIMER1 при отладке

редактор писал(а):
Похоже, что не включено тактирование таймера (регистр RST_CLK->PER_CLOCK), поэтому вариант, предложеный ЧумА, скорее всего тоже не взлетит.
Действительно забыл включить тактирование таймера, спасибо!

Страница 1 из 1 Часовой пояс: UTC+03:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/