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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> проблема с Timer/Counter, AT91SAM7X
Ivan_Petrov
сообщение Oct 13 2007, 20:14
Сообщение #16


Участник
*

Группа: Свой
Сообщений: 43
Регистрация: 12-10-07
Пользователь №: 31 293



Цитата(aaarrr @ Oct 13 2007, 23:52) *
Таймер и так сбрасывается по SWTRG, только вот на делители входных частот этот сброс не распространяется.

Я имел ввиду сброс по SWRST, который присутсвует почти во всех переферийных блоках, но в таймере его нет, извиняюсь недосмотрел.
Go to the top of the page
 
+Quote Post
Sergei_K
сообщение Oct 16 2007, 13:17
Сообщение #17


Участник
*

Группа: Новичок
Сообщений: 49
Регистрация: 14-02-07
Пользователь №: 25 346



Цитата(aaarrr @ Oct 12 2007, 18:09) *
Как пробовали? Настройками таймера?


ну естественно.. а как же еще..
прописал бит ACPC (RC Compare Effect on TIOA) на переключение уровня.. Настроил PIO на работу с периферией A..

Результат: переключает уровни на TIOA при сравнении с RC.. в целом же картина с увеличением (уменьшением) значения в RC, как уже говорил, не изменилась..

Сообщение отредактировал Sergei_K - Oct 16 2007, 13:18
Go to the top of the page
 
+Quote Post
Dron_Gus
сообщение Oct 16 2007, 19:20
Сообщение #18


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 9-01-05
Из: Санкт-Петербург
Пользователь №: 1 861



Выкладывайте код - будут советы...


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post
Sergei_K
сообщение Oct 17 2007, 08:33
Сообщение #19


Участник
*

Группа: Новичок
Сообщений: 49
Регистрация: 14-02-07
Пользователь №: 25 346



Цитата(Dron_Gus @ Oct 17 2007, 02:20) *
Выкладывайте код - будут советы...


инициализация..
.................................
pTC->TC_CMR = AT91C_TC_CLKS_TIMER_DIV1_CLOCK | // TIMER_CLOCK1 selected
AT91C_TC_WAVE | // waveform mode
AT91C_TC_WAVESEL_UP_AUTO | // WAVSEL=10
AT91C_TC_CPCSTOP | // stop clock
AT91C_TC_CPCDIS | // disable clock
AT91C_TC_ACPC_TOGGLE; // RC Compare Effect on TIOA

*AT91C_PMC_PCER = (1<<AT91C_ID_TC1); // enable TC1
pPMC->PMC_MCKR = AT91C_PMC_CSS_PLL_CLK | // select PLL clock
AT91C_PMC_PRES_CLK; // selected clock divided by 1

pPIOB->PIO_PDR = ((unsigned int) 0x1 << 25); // disable PB25
pPIOB->PIO_ODR = ((unsigned int) 0x1 << 25); // disable PB25 to be driven
pPIOB->PIO_ASR = ((unsigned int) 0x1 << 25); // enable Peripheral A
.................................

программа..
.................................

pTC_int->TC_RC = Fr_int; // write value to RC
pTC_int->TC_CCR = AT91C_TC_CLKEN | // enable clock
AT91C_TC_SWTRG; // start clock

while ((pTC_int->TC_SR & AT91C_TC_CPCS) == 0); // wait for TC RC compare
..................................

собственно, все..

Сообщение отредактировал Sergei_K - Oct 17 2007, 08:37
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 17 2007, 08:46
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Sergei_K @ Oct 17 2007, 12:33) *
AT91C_TC_CPCSTOP | // stop clock
AT91C_TC_CPCDIS | // disable clock

Т.е. запукается таймер один раз - откуда тогда частота берется? И в RA ничего не пишется.
Вопросов меньше не стало.
Go to the top of the page
 
+Quote Post
Sergei_K
сообщение Oct 22 2007, 09:14
Сообщение #21


Участник
*

Группа: Новичок
Сообщений: 49
Регистрация: 14-02-07
Пользователь №: 25 346



Цитата(aaarrr @ Oct 17 2007, 15:46) *
Т.е. запукается таймер один раз - откуда тогда частота берется? И в RA ничего не пишется.
Вопросов меньше не стало.


то, что инициализация, выполняется один раз..
то, что программа, естественно, зацикленно.. просто мне казалось, что это очевидно..
таким образом, таймер запускается каждый раз при выполнении:
Цитата
pTC_int->TC_CCR = AT91C_TC_CLKEN | // enable clock
AT91C_TC_SWTRG; // start clock


RA не используется.. используется только RC.. Как видно, уровень на ноге переключается при RC сравнении..
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 22 2007, 11:37
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Sergei_K @ Oct 22 2007, 13:14) *
просто мне казалось, что это очевидно..

Нет, далеко не очевидно.

Цитата(Sergei_K @ Oct 22 2007, 13:14) *
таким образом, таймер запускается каждый раз при выполнении:
RA не используется.. используется только RC.. Как видно, уровень на ноге переключается при RC сравнении..

И что Вы тогда пытались получить на RA здесь:
Цитата(Sergei_K @ Oct 16 2007, 17:17) *
прописал бит ACPC (RC Compare Effect on TIOA) на переключение уровня.. Настроил PIO на работу с периферией A..
???????

Еще раз повторяю, что конструкция:
Код
while ((pTC_int->TC_SR & AT91C_TC_CPCS) == 0); // wait for TC RC compare

может дать непредсказуемое дрожание фазы.
Если хотите что-то измерять, перезапускайте таймер аппаратными средствами - режим WAVSEL = 10 придуман именно для этого.
Go to the top of the page
 
+Quote Post
Sergei_K
сообщение Oct 23 2007, 11:44
Сообщение #23


Участник
*

Группа: Новичок
Сообщений: 49
Регистрация: 14-02-07
Пользователь №: 25 346



Цитата
И что Вы тогда пытались получить на RA..


что-то либо я ничего не понимаю, либо вы меня неправильно поняли.. Я в принципе с регистром RA не работаю и получить от него ничего не хотел и не хочу.. Когда счетчик досчитывает до значения, помещенного в регистр RC (для этого как раз устанавливается бит прописал бит ACPC), на портовой ножке TIOA происходит смена уровня..

Цитата
Если хотите что-то измерять, перезапускайте таймер аппаратными средствами - режим WAVSEL = 10 придуман именно для этого


не уверен, что понял вас правильно.. Каким образом это делается?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 23 2007, 11:54
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Sergei_K @ Oct 23 2007, 15:44) *
не уверен, что понял вас правильно.. Каким образом это делается?

Уберите из инициализации AT91C_TC_CPCSTOP и AT91C_TC_CPCDIS, тогда таймер будет автоматически перезапускаться при достижении значения, записанного в RC.
После этого можно будет достоверно измерять частоту.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 12:21
Рейтинг@Mail.ru


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