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

 
 
> как работает TC на at91rm9200, прерывание не сбрасывается
boryx
сообщение May 25 2006, 06:55
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 20
Регистрация: 25-05-06
Пользователь №: 17 428



столкнулся с проблемой.

конфигурю регистры для любого таймера скажем для TC5

at91_tc5_write(AT91_TC_CCR, AT91_TC_CLKEN);//enable timer
at91_tc5_write(AT91_TC_CMR,
AT91_TC_TIMER_CLOCK5| //slow clock ~32kHz
AT91_TC_WAVE| //wave mode
AT91_TC_WAVESEL_UP_AUTO); //triger on RC

at91_tc5_write(AT91_TC_RC, 0x1000);
at91_tc5_write(AT91_TC_CCR, AT91_TC_SWTRG); //restart timer
at91_tc5_write(AT91_TC_IER, AT91_TC_CPCS);//enable interrupt

теперь по даташиту счетчик должен считать, и когда дойдет до 0х1000 должно сработать прерывание.

на практике прекращается загрузка сисетмы и прерыване запускается все время, захватывая все ресурсы
я так понимаю, что флажок не сбрасывается. Или я что-то не так делаю???

какие будут соображения
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
beer_warrior
сообщение May 25 2006, 10:56
Сообщение #2


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

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Я наверное невнятно спросил - флажок прерывания должен сниматься явно в EOICR - вы это учли?
стр.258
The End of Interrupt Command Register is used by the interrupt routine to indicate that the interrupt treatment is complete.
Any value can be written because it is only necessary to make a write to this register location to signal the end of interrupt
treatment.
Или каким-то образом конфликтует с Линухом.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
boryx
сообщение May 25 2006, 14:00
Сообщение #3


Участник
*

Группа: Новичок
Сообщений: 20
Регистрация: 25-05-06
Пользователь №: 17 428



Цитата(beer_warrior @ May 25 2006, 13:56) *
Я наверное невнятно спросил - флажок прерывания должен сниматься явно в EOICR - вы это учли?
стр.258
The End of Interrupt Command Register is used by the interrupt routine to indicate that the interrupt treatment is complete.
Any value can be written because it is only necessary to make a write to this register location to signal the end of interrupt
treatment.
Или каким-то образом конфликтует с Линухом.



с Линухом конфликта быть не может. только мой драйвер обрабатывает прерывание с этим номером.
Интересно что при обработке других прерываний в др. драйверах никогда не обнулял этот флаг, так как это Линух где то сам делает в обработчике.

Спасибо, очень интересная идея с EOICR, буду пробовать. Может для прерываний у таймеров влажок почему-то не сбрасывается.
Go to the top of the page
 
+Quote Post



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

 


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


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