Миландр

Ключевым подразделением нашей компании
является Центр Проектирования интегральных микросхем
Текущее время: 2019-авг-25 17:14

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
СообщениеДобавлено: 2019-апр-17 08:10 
Не в сети

Зарегистрирован: 2019-мар-25 11:40
Сообщения: 8
Доброго времени суток участникам форума, продолжаю изучать микроконтроллер К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, системный таймер, все работало.


Вложения:
для форума.JPG
для форума.JPG [ 274.52 КБ | Просмотров: 366 ]
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2019-апр-17 09:28 
Не в сети

Зарегистрирован: 2009-сен-21 12:39
Сообщения: 505
Пример рабочий, до вызова нужно настроить тактирование таймера и функцию соответствующего таймеру вывода порта.
Для работы прерываний также отдельно требуется: 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 
Не в сети

Зарегистрирован: 2010-авг-30 19:12
Сообщения: 438
Похоже, что не включено тактирование таймера (регистр RST_CLK->PER_CLOCK), поэтому вариант, предложеный ЧумА, скорее всего тоже не взлетит.

_________________
О сколько нам открытий чудных
Готовит просвященья дух,
И опыт - сын ошибок трудных ... (Пушкин)

Пергаменты не утоляют жажду ("Фауст",Гете)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2019-апр-17 17:26 
Не в сети

Зарегистрирован: 2019-мар-25 11:40
Сообщения: 8
редактор писал(а):
Похоже, что не включено тактирование таймера (регистр RST_CLK->PER_CLOCK), поэтому вариант, предложеный ЧумА, скорее всего тоже не взлетит.

Действительно забыл включить тактирование таймера, спасибо!


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB