Перейти к содержанию
    

как работает TC на at91rm9200

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

 

конфигурю регистры для любого таймера скажем для 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 должно сработать прерывание.

 

на практике прекращается загрузка сисетмы и прерыване запускается все время, захватывая все ресурсы

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

 

какие будут соображения

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А вы правильно настроили AIC?

B что-нибудь подобное использовали?

//clear interrupt flag
AT91F_PITGetPIVR(AT91C_BASE_PITC);
//end of intterupt
AT91C_BASE_AIC->AIC_EOICR = 0;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А вы правильно настроили AIC?

B что-нибудь подобное использовали?

//clear interrupt flag
AT91F_PITGetPIVR(AT91C_BASE_PITC);
//end of intterupt
AT91C_BASE_AIC->AIC_EOICR = 0;

 

Да с этим вроде как все впорядке.

на at91rm9200 стоит LINUX.

 

при инициализации драйвера

request_irq(AT91_ID_TC5, ...)

 

до того момента, как я энаблю прерывание на соответствие с RC (да или любого другоа) все в порядке.

а как включаю прерывание, оно срабатывает сного и сного без перерыва.

 

Таимер я использую для своих нужд и ножки не энаблю в PIO.

 

мне нужно, чтобы через определенные промежутки времени срабатывала функцияю

 

Сейчас использую Линуксовский таймер, но промежутки получаются слишком большие.

 

в проце 6 таймеров а я linux загружаю лишней работой...

 

кто может привести рабочий пример как с таймером работать, какие команды в каком порядке запускать.

 

писал дрова для SPI,SSC и такой проблемы не возникало.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я наверное невнятно спросил - флажок прерывания должен сниматься явно в 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 - вы это учли?

стр.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, буду пробовать. Может для прерываний у таймеров влажок почему-то не сбрасывается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Еще в прерывании стоит считать регистр статуса таймера

Код от Atmel для SAM7 (в rm9200, вроде, также):

 

//* Acknowledge interrupt status

dummy = AT91C_BASE_TC1->TC_SR;

//* Suppress warning variable "dummy" was set but never used

dummy = dummy;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...