реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Прерывания 2138, от таймера
tolik_zp
сообщение Jun 1 2007, 13:22
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 127
Регистрация: 2-08-06
Пользователь №: 19 265



Доброго времени суток!
У меня почему-то происходят глюки с таймером. Таймер 0 настроен на сброс от T0MR2, при этом меняется состояние ноги MAT0.2 и вызывается прерывание fiq, вроде все работает как положено. Но! Если я в прерывании меняю T0MR2, скажем через n вызовов прерываний, то таймер улетает куда-то и долго не возвращается. Че за дела? Или в MR нельзя писать при запущеном таймере?
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jun 1 2007, 13:31
Сообщение #2


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Писать-то можно. Но несколько тактов он будет как бы недоступен, то есть валидно будет старое значение MR. А если окажется что счётчик таймера уже обогнал MR, то он будет тикать до конца 32-битного значения, а уже после переполнения догонит MR. Защиты от превышения MR нет.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
tolik_zp
сообщение Jun 1 2007, 13:37
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 127
Регистрация: 2-08-06
Пользователь №: 19 265



Цитата(GetSmart @ Jun 1 2007, 16:31) *
Писать-то можно. Но несколько тактов он будет как бы недоступен, то есть валидно будет старое значение MR. А если окажется что счётчик таймера уже обогнал MR, то он будет тикать до конца 32-битного значения, а уже после переполнения догонит MR. Защиты от превышения MR нет.


Я уже и задержку вставлял в прерывании перед вводом нового значения... Как же он обгонит, если он сбрасывается при совпадении?
Кстати, похоже что счетчик действительно улетает за пределы MR, только не понимаю почему, ведь должен быть сброс
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jun 1 2007, 13:56
Сообщение #4


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



А может всю логику переделать на PWM. Там есть такие контрольные битики, которые если не дрыгнуть, то новое значение MR не будет валидным.

А вообще, показали бы код што ли.

Ну или так. Обновляете MR в прерывании, а потом контрольную проверочку таймера на то, обогнал ли он MR.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
rezident
сообщение Jun 1 2007, 14:53
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(GetSmart @ Jun 1 2007, 19:56) *
Ну или так. Обновляете MR в прерывании, а потом контрольную проверочку таймера на то, обогнал ли он MR.

А если обогнал, то остановить, сбросить и запустить таймер снова.
Go to the top of the page
 
+Quote Post
sqrt
сообщение Jun 2 2007, 13:11
Сообщение #6


Участник
*

Группа: Свой
Сообщений: 66
Регистрация: 14-07-05
Из: Moscow
Пользователь №: 6 786



Цитата(tolik_zp @ Jun 1 2007, 17:22) *
Если я в прерывании меняю T0MR2, скажем через n вызовов прерываний, то таймер улетает куда-то и долго не возвращается. Че за дела? Или в MR нельзя писать при запущеном таймере?

А чем стандартное решение не устраивает? Выключить и сбросить таймерный и масштабируемый счетчики, установить нужное значение в TxMRx и снова включить таймерный и масштабируемый счетчики.
Go to the top of the page
 
+Quote Post
tolik_zp
сообщение Jun 4 2007, 06:02
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 127
Регистрация: 2-08-06
Пользователь №: 19 265



Цитата(sqrt @ Jun 2 2007, 16:11) *
А чем стандартное решение не устраивает? Выключить и сбросить таймерный и масштабируемый счетчики, установить нужное значение в TxMRx и снова включить таймерный и масштабируемый счетчики.


Таймер используется для генерации синхроимпульсов видеосигнала, по-этому его останавливать нельзя. Можно конечно и ШИМ попробовать, но все же не ясна природа загадки smile.gif
В мануале на стр. 197 четко и ясно нарисовано откуда растут сбросы и вызовы прерываний от таймера, но таймер почему-то не всегда сбрасывается. Я уже и задержку в прерывании вставлял, не помогает - прерывание несколько раз вызывается нормально, но через некоторое время таймер все-равно убегает от T0MR2... Такое впечатление, что возможность записи MR зависит от фазы.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jun 4 2007, 08:28
Сообщение #8


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



дайте прогу почитать. может яснее станет


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
tolik_zp
сообщение Jun 4 2007, 09:51
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 127
Регистрация: 2-08-06
Пользователь №: 19 265



Цитата(GetSmart @ Jun 4 2007, 11:28) *
дайте прогу почитать. может яснее станет


Всем спасибо за участие, была ошибка в коде - я сбрасывал не тот флаг прерывания...
Go to the top of the page
 
+Quote Post
SpiritDance
сообщение Jun 4 2007, 10:41
Сообщение #10


Дух погибшего транзистора
****

Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288



tolik_zp
smile.gif) жжошь


--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 00:06
Рейтинг@Mail.ru


Страница сгенерированна за 0.01436 секунд с 7
ELECTRONIX ©2004-2016