Миландр

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

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 208 сообщений ]  На страницу 1 2 3 4 514 »
Автор Сообщение
 Заголовок сообщения: Таймеры общего назначения
СообщениеДобавлено: 2010-сен-08 10:20 
Не в сети

Зарегистрирован: 2010-апр-22 15:57
Сообщения: 109
Откуда: Москва, Зеленоград
Я правильно понял, что для тактирования выбранного таймера по событию CNT==ARR в другом таймере, необходимо и достаточно в подчиненном таймере установить соответствующее значение битов EVENT_SEL в регистре TIMx_CNTRL?
Т.е. для "подчинения" 2го таймера 3му нужно выполнить следующее:

TIM2->CNTRL = 0x3<<EVENT_SEL;


Вынести предупреждение
Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: 2010-сен-08 15:29 
Не в сети

Зарегистрирован: 2010-апр-22 15:57
Сообщения: 109
Откуда: Москва, Зеленоград
Подчиненным таймером управляет событие CNT=ARR в управляющем таймере. Проблема в том, что подчиняемый счетчик считает всегда) И возникает это, видимо, по следующей причине:

Возьмем Таймер 1. Считает он нормально, но в регистре статуса таймера TIM1->STATUS, бит CntArrEvent ==1 постоянно (Событие совпадения CNT с ARR).
Собственное, генерация прерывания по событию совпадения CNT с ARR происходит также постоянно.

Проект прикреплен. Второй диод зажигается\гаснет при факте обработки прерывания.


Вложения:
timers.rar [158.28 КБ]
728 скачиваний
Вынести предупреждение
Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: 2010-сен-08 17:44 
Не в сети

Зарегистрирован: 2009-май-22 09:01
Сообщения: 1299
Откуда: АО "ПКК Миландр"
dania писал(а):
Подчиненным таймером управляет событие CNT=ARR в управляющем таймере. Проблема в том, что подчиняемый счетчик считает всегда) И возникает это, видимо, по следующей причине:

Возьмем Таймер 1. Считает он нормально, но в регистре статуса таймера TIM1->STATUS, бит CntArrEvent ==1 постоянно (Событие совпадения CNT с ARR).
Собственное, генерация прерывания по событию совпадения CNT с ARR происходит также постоянно.

Проект прикреплен. Второй диод зажигается\гаснет при факте обработки прерывания.
C прерывание проблема в том, что вы не очищаете флаг CNT
ARR EVENT.
Объединения таймеров в проекте не нашел.


Вынести предупреждение
Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: 2010-сен-09 10:07 
Не в сети

Зарегистрирован: 2009-май-22 09:01
Сообщения: 1299
Откуда: АО "ПКК Миландр"
-=Sergei=- писал(а):
dania писал(а):
Подчиненным таймером управляет событие CNT=ARR в управляющем таймере. Проблема в том, что подчиняемый счетчик считает всегда) И возникает это, видимо, по следующей причине:

Возьмем Таймер 1. Считает он нормально, но в регистре статуса таймера TIM1->STATUS, бит CntArrEvent ==1 постоянно (Событие совпадения CNT с ARR).
Собственное, генерация прерывания по событию совпадения CNT с ARR происходит также постоянно.

Проект прикреплен. Второй диод зажигается\гаснет при факте обработки прерывания.
C прерывание проблема в том, что вы не очищаете флаг CNT
ARR EVENT.
Объединения таймеров в проекте не нашел.
P/S/ зато другую ошибку нашел. Сбрасывая один флаг, можно сбросить другой флаг который взведется между последним чтением первого флага и его сбросом. Подрпавил.


Вынести предупреждение
Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: 2010-сен-13 10:34 
Не в сети

Зарегистрирован: 2010-апр-22 15:57
Сообщения: 109
Откуда: Москва, Зеленоград
Подправил обработчик:
void __irq TIM1_IRQHandler(){

	TIM1->STATUS &= ~(1<<CNT_ARR_EVENT);//сброс флага события CNR==ARR
	PORTD->RXTX ^= 1<<LED1_OFS;//меняем состояние диода
	HWREG(CLRENA) |= 1<<14;//TIM1 IRQ -> OFF
}
Теперь программа уходит в обработчик при включении таймера, и первого "законного" прерывания не происходит, т.к. регистр CLRENA очищен.

Если до включения таймера TIM1->CNTRL = 0x00000001; вставить пустой цикл for(int i; i<100; i++) например, то при включении таймера программа в обработчик не уходит, перерывание генерируется по событию CNR==ARR как и положено.

Объединене таймеров я действительно не вложил, подумал, что проблема общая)


Вынести предупреждение
Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: 2010-сен-13 10:57 
Не в сети

Зарегистрирован: 2010-апр-22 15:57
Сообщения: 109
Откуда: Москва, Зеленоград
Объединение таймеров.


Вложения:
timers.rar [165.05 КБ]
572 скачивания
Вынести предупреждение
Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: 2010-сен-15 11:42 
Не в сети

Зарегистрирован: 2009-май-22 09:01
Сообщения: 1299
Откуда: АО "ПКК Миландр"
dania писал(а):
Объединение таймеров.
Для третьего таймера надо еще задать режим CNT_MODE[1:0] 6 и 7 биты в TIM_CONTROL

Режим счета основного счетчика
00 – счетчик вверх при DIR=0
cчетчик вниз при DIR=1
при PSG = 0

01 – счетчик вверх/вниз с автоматическим изменением DIR при
PSG = 0

10 – счетчик вверх при DIR=0
cчетчик вниз при DIR=1
при EVENT = 1

11 – счетчик вверх/вниз с автоматическим изменением DIR при
EVENT = 1

Судя по всему вам надо "10".


Вынести предупреждение
Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: 2010-сен-15 13:02 
Не в сети

Зарегистрирован: 2010-апр-22 15:57
Сообщения: 109
Откуда: Москва, Зеленоград
Да, действительно! Спасибо.
Тогда можно подправить в спецификации подпись под рисунком №68 - Диаграммы работы трех таймеров в каскаде )


Вынести предупреждение
Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: 2010-сен-23 09:27 
Не в сети

Зарегистрирован: 2010-авг-30 19:12
Сообщения: 467
Возможно ли в будущей ревизии добавить следующую фишку:
Запуск АЦП по сигналу от Таймера (модуля сравнения).
Чтобы делать измерения через фиксированные интервалы времени без дополнительных прерываний.


Вынести предупреждение
Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: 2010-сен-23 09:31 
Не в сети

Зарегистрирован: 2009-май-22 09:01
Сообщения: 1299
Откуда: АО "ПКК Миландр"
редактор писал(а):
Возможно ли в будущей ревизии добавить следующую фишку:
Запуск АЦП по сигналу от Таймера (модуля сравнения).
Чтобы делать измерения через фиксированные интервалы времени без дополнительных прерываний.
В новой ревизии исправлен DMA, теоретически он должен решить эту проблему.

Запрос DMA от таймера осуществляет пересылку команды в ADC, и по окончанию преобразования запрос от ADC вызывает пересылку в память.

Какой либо жесткой аппаратной связки не будет.

В новых проектах постараемся учесть.


Вынести предупреждение
Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: 2011-янв-15 16:37 
Не в сети

Зарегистрирован: 2010-апр-22 15:57
Сообщения: 109
Откуда: Москва, Зеленоград
Проблема в следующем: программа не заходит в обработчик прерываний от Таймера3 по сигналу Capture1 и записи в CCR1.

С ССR всё в порядке.

Параметры: Таймер3, канал захвата 2 (порт C, pin 4).

P.S. Пока выяснял в чем дело, заметил, что в Debug->Memory в регистрах
TIMER3->CH2_CNTRL (0x40080024) и TIMER3->CH2_CNTRL2 (0x40080064) НУЛИ, хотя как минимум по одной единичке-то туда записано )

Проект под Кеил прилагается.
Спасибо.


Вложения:
timers_FreqCalc.rar [353.34 КБ]
524 скачивания
Вынести предупреждение
Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: 2011-янв-16 15:18 
Не в сети

Зарегистрирован: 2010-апр-22 15:57
Сообщения: 109
Откуда: Москва, Зеленоград
+ в регистре TIMER3->STATUS флаг
TIMER_STATUS_CCR_CAP_EVENT выставляется, а флаг
TIMER_STATUS_CCR1_CAP_EVENT нет.


Вынести предупреждение
Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: 2011-янв-18 16:24 
Не в сети

Зарегистрирован: 2010-апр-22 15:57
Сообщения: 109
Откуда: Москва, Зеленоград
Может быть проблема как-то связана вот с этим: viewtopic.php?p=734#734
?


Вынести предупреждение
Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: 2011-янв-19 10:12 
Не в сети

Зарегистрирован: 2010-янв-13 14:39
Сообщения: 16
Откуда: АО "ПКК Миландр"
В вашем проекте не понятно откуда подается сигнал на вход второго канала для захвата. По самому проекту, с моей точки зрения не логично сначала разрешать работу таймера по захвату, и только потом инициализировать порты на работу с таймером, в начале могут быть захвачены случайные события.
На основе вашего проекта создан другой, в нем используется два канала Timer3, первый канал работает в режиме ШИМ, значение на выходе канала переключается на инверсное при достижении счетчиком значения - 0х50, основание счета = 0х100, второй канал как и у вас работает в режиме захвата положительного фронта в CCR, а отрицательного фронта в CCR1, на плате канал 1 и канал 2 замкнуты.
На примере наглядно видно, что программа входит в обработчик прерываний от Таймера3 и по сигналу Capture(записи в CCR) и по сигналу Capture1(записи в CCR1). В регистре TIMER3->STATUS флаг TIMER_STATUS_CCR1_CAP_EVENT выставляется.

Посмотрите вложений проект.


Вложения:
timers_FreqCalc.rar [354.1 КБ]
655 скачиваний
Вынести предупреждение
Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: 2011-янв-19 11:35 
Не в сети

Зарегистрирован: 2010-апр-22 15:57
Сообщения: 109
Откуда: Москва, Зеленоград
Сигнал на вход второго канал для захвата я подавал или с внешнего генератора сигналов или просто вешал кнопку с платы (забыл указать).
Да, действительно логичнее сначала определить порты, а потом инициализировать таймер, спасибо!

Запустил измененный проект, регистр по адресу 0х40080074 (СCR1 для второго канала) остаётся нулевым. В регистре STATUS также как и прежде не выставляются флаги захвата CCR1.
У вас какая версия кристалла?

P.S. Спасибо, что подправили некоторые моменты в проекте - учту на будущее.
P.S.S. А почему вы делаете установку RST_CLK -> TIM_CLOCK (включение частоты на таймер и установка делителя) в момент после включения таймера? По идее, должно же быть наоборот?


Вынести предупреждение
Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 208 сообщений ]  На страницу 1 2 3 4 514 »

Часовой пояс: UTC+03:00


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

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


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

Перейти: 

cron
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB