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

 
 
 
Reply to this topicStart new topic
> Таймер в blackfin 533, Непонятное значение в TIMERx_COUNTER
verali
сообщение Dec 23 2015, 15:37
Сообщение #1


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

Группа: Свой
Сообщений: 82
Регистрация: 6-11-14
Пользователь №: 83 540



Добрый вечер! Разбираюсь с таймером в BF533. Делаю программу мигания светодиодом по прерыванию таймера 0.
По теории после включения таймера в режиме ШИМ (PWMOUT) в регист TIMERx_COUNTER должен записаться 0 и счетчиком инкрементироваться до значения в регистре TIMERX_PERIOD.
В моем же случае в регистр TIMERx_COUNTER после включения таймера записывается рандомное число и с каждым новым тактом значение в данном регистре увеличивается на рандомное число (причем с каждым разом это число разное), соответсвенно и прерывание срабатывает почти сразу после начала выполнения программы(программа входит в обработчик прерываний, устанавливается нулевой бит в регистре TIMER_STATUS). В регистре TIMER_CONFIG устанавливаю биты:
1)PWM_OUT - включение режима ШИМ
2)OUT_DIS - запрещение сигнала на выходе TMRx
3)PERIOD_CNT - генерируется ШИМ сигнал
4)IRQ_EN - разрешение прерывания
5)EMU_RUN - при эмуляции таймер работает

Может быть кто-нибудь сталкивался с данной проблемой?
Go to the top of the page
 
+Quote Post
kolobochishe
сообщение Dec 23 2015, 16:29
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 240
Регистрация: 14-04-10
Из: Россия, г.Челябинск
Пользователь №: 56 634



Источник частоты для таймера какой выбрали? Там, вроде, 2 варианта PPI и SCLK. Просто ШИМ режим он же непрерывный. Т.е. счетчик не останавливается, а продолжает считать с 0, а то что сработало прерывание не означает что таймер не успел начать счет заново. А если частота выбрана SCLK, то и большое число будет рандомным, т.к. считает очень быстро

Сообщение отредактировал kolobochishe - Dec 23 2015, 16:29
Go to the top of the page
 
+Quote Post
uriy
сообщение Dec 23 2015, 16:44
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 429
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



Цитата
По теории после включения таймера в режиме ШИМ (PWMOUT) в регист TIMERx_COUNTER должен записаться 0 и счетчиком инкрементироваться до значения в регистре TIMERX_PERIOD.
Не помню точно так или может быть наоборот считает на декремент.
Числа вы видите рандомные потому что установлен бит EMU_RUN - при эмуляции таймер работает. Это означает что таймер работает даже если вы остановили программу в эмуляторе.
Внутри прерывания сбрасываете статусный бит?

Вот так у меня формируется на выходе четверть частоты SCLK
Код
#define BF_T0_PERIOD                4
#define BF_T0_WITDH                2
*pTIMER0_CONFIG    = PWM_OUT | PERIOD_CNT;
*pTIMER0_PERIOD    = BF_T0_PERIOD;
*pTIMER0_WIDTH    = BF_T0_WITDH;
*pTIMER_ENABLE    |= TIMEN0;
Go to the top of the page
 
+Quote Post
verali
сообщение Dec 24 2015, 12:03
Сообщение #4


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

Группа: Свой
Сообщений: 82
Регистрация: 6-11-14
Пользователь №: 83 540



Цитата(kolobochishe @ Dec 23 2015, 16:29) *
Источник частоты для таймера какой выбрали? Там, вроде, 2 варианта PPI и SCLK. Просто ШИМ режим он же непрерывный. Т.е. счетчик не останавливается, а продолжает считать с 0, а то что сработало прерывание не означает что таймер не успел начать счет заново. А если частота выбрана SCLK, то и большое число будет рандомным, т.к. считает очень быстро

Все верно, два источника частоты для таймера.Я выбрал SCLK.
Значит я ошибочно считал, что при каждом "шаге"(F11) в дебагере (использую ADSP bf533 EZ KIT LITE), значение в TIMERx_COUNTER должно увеличиваться на 1.

Цитата(uriy @ Dec 23 2015, 16:44) *
Не помню точно так или может быть наоборот считает на декремент.
Числа вы видите рандомные потому что установлен бит EMU_RUN - при эмуляции таймер работает. Это означает что таймер работает даже если вы остановили программу в эмуляторе.
Внутри прерывания сбрасываете статусный бит?

Исходя из схемы работы таймера, счетчик таймера идет на инкремент и сравнивает свое значение с регистром TIMERx_COUNTER, пока значение в регистре счетчика не станет равным с TIMERx_COUNTER.
Да, первым делом в обработчике прерывания сбрасываю статусный бит.
Спасибо за объяснение.
Сейчас попробую на железе помигать светодиодом, чтобы визуально оценить правильность работы таймера.
Go to the top of the page
 
+Quote Post

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

 


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


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