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

 
 
> arm AT91sam7s256 + FREERTOS
Пришелец
сообщение Oct 7 2006, 09:25
Сообщение #1


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

Группа: Участник
Сообщений: 183
Регистрация: 28-01-05
Пользователь №: 2 272



arm AT91sam7s256 + FREERTOS help.gif

Пытаюсь использовать прерывания от таймера 0. - прерывания не возникают blink.gif

настраиваю таймер и AIC как в IAR овском примере проекта с прерываниями (который без RTOS на плате работает)

В чём могут быть грабли unsure.gif - подскажите кто знает

Заранее спасибо! biggrin.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Пришелец
сообщение Oct 10 2006, 09:59
Сообщение #2


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

Группа: Участник
Сообщений: 183
Регистрация: 28-01-05
Пользователь №: 2 272



да асм обёртка есть :

Код
vTimerISREntry:

    portSAVE_CONTEXT        ; Save the context of the current task.

    bl    timer0_c_irq_handler            ; Call the ISR routine.

    portRESTORE_CONTEXT        ; Restore the context of the current task -
                            ; which may be different to the task that
                            ; was interrupted.




вот обработчик на C:

Код
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++;
    //* Read the output state
    vParTestToggleLED(3);
}



Настройка таймера и прерываний:


Код
void soft_uart_ini(void)
{
      unsigned int dummy;
          portENTER_CRITICAL();
        {
        
        //* First, enable the clock of the TIMER
            AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1<< AT91C_ID_TC0 );

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

        //* Clear status bit
            dummy = AT91C_BASE_TC0->TC_SR;
        //* Suppress warning variable "dummy" was set but never used
            dummy = dummy;
        //* Set the Mode of the Timer Counter
        AT91C_BASE_TC0->TC_CMR = 4;
    
        //* Enable the clock
        AT91C_BASE_TC0->TC_CCR = AT91C_TC_CLKEN;
        
    AT91F_AIC_ConfigureIt ( AT91C_BASE_AIC, AT91C_ID_TC0, TIMER0_INTERRUPT_LEVEL,AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL, vTimerISREntry);
    AT91C_BASE_TC0->TC_IER = AT91C_TC_CPCS;  //  IRQ enable CPC
    AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_TC0);

    AT91C_BASE_TC0->TC_CCR = AT91C_TC_SWTRG;
    
        }
        portEXIT_CRITICAL();
}




Ни светодиодом не моргает ни на точках останова не останавливается.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


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

 


RSS Текстовая версия Сейчас: 20th August 2025 - 07:57
Рейтинг@Mail.ru


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