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

 
 
 
Reply to this topicStart new topic
> Кто работал с AS-9200, Проблемы с прерываниями
Daermon
сообщение Oct 29 2007, 06:18
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 36
Регистрация: 26-10-07
Пользователь №: 31 739



Если кто то писал в IAR 4.41 помогите!

Не могу вызвать прерывание таймера ... вроде бы все делаю правильно.

Инизиализирую таймер:

AT91C_BASE_AIC->AIC_IDCR = 0xFFFFFFFF ; /* reset the aic, disable all interrupts */
AT91C_BASE_AIC->AIC_ICCR = 0xFFFFFFFF ; /* clear all interrupts */
AT91C_BASE_AIC->AIC_EOICR = 0 ; /* unstack one level */
AT91C_BASE_PMC->PMC_PCER |= ( 1UL<<AT91C_ID_TC0 ) ; /* enable tc0 */
AT91C_BASE_AIC->AIC_IDCR |= ( 1UL<<AT91C_ID_TC0 ) ; /* disable pio interrupt */
AT91C_BASE_AIC->AIC_SVR[AT91C_ID_TC0] = ( AT91_REG )timer0_c_irq_handler; /* set isr */
//* Open timer0
AT91F_TC_Open(AT91C_BASE_TC0,5,AT91C_ID_TC0);
//* Start timer0
AT91C_BASE_TC0->TC_CCR |= AT91C_TC_SWTRG ;
AT91C_BASE_AIC->AIC_SMR[AT91C_ID_TC0] = ( AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE )|( 1/* prio 1*/ ) ;
AT91C_BASE_AIC->AIC_ICCR |= ( 1UL<<AT91C_ID_TC0) ; /* clear pio interrupt */
AT91C_BASE_AIC->AIC_IECR |= ( 1UL<<AT91C_ID_TC0 ) ; /* enable pio interrupt */
__enable_interrupt( ) ;
AT91C_BASE_TC0->TC_IER |= AT91C_TC_CPCS | AT91C_TC_COVFS | AT91C_TC_LOVRS; // IRQ enable CPC


AT91F_TC_Open

void AT91F_TC_Open ( AT91PS_TC TC_pt, unsigned int Mode, unsigned int TimerId)
//* Begin
{
unsigned int dummy;

//* First, enable the clock of the TIMER
AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1<< TimerId ) ;

//* Disable the clock and the interrupts
TC_pt->TC_CCR = AT91C_TC_CLKDIS ;
TC_pt->TC_IDR = 0xFFFFFFFF ;

//* Clear status bit
dummy = TC_pt->TC_SR;
//* Suppress warning variable "dummy" was set but never used
dummy = dummy;
//* Set the Mode of the Timer Counter
TC_pt->TC_CMR = Mode ;
// TC_pt->TC_RC =60000;
//* Enable the clock
TC_pt->TC_CCR |= (AT91C_TC_CLKEN) ;
//* End
};



Сам обработчик
static __arm __irq void timer0_c_irq_handler(void)
{
AT91PS_TC TC_pt = AT91C_BASE_TC0;
unsigned int dummy;
//* Acknowledge interrupt status
dummy = TC_pt->TC_SR;
//* Suppress warning variable "dummy" was set but never used
dummy = dummy;
count_timer0_interrupt++;
AT91C_BASE_AIC->AIC_EOICR = 0 ; /* end interrupt */
};



Может где то ошибка?
Если у кого есть примеры для Аргусовтовской платы скиньте пожалуйста.
Go to the top of the page
 
+Quote Post
Dron_Gus
сообщение Oct 29 2007, 10:52
Сообщение #2


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

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



В инициализации таймера попробуйте добавить
//* Start timer0
AT91C_BASE_TC0->TC_CCR = AT91C_TC_SWTRG ;

И зря вы этот вопрос поместили в подфорум. В форуме по АРМам больше народу "тусуется".

Добавил: извиняюсь, у Вас это уже есть... Тогда не знаю...


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post

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

 


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


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