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

 
 
> почему может сботь контроллер прерываний VIC?
sergik_vrn
сообщение Jan 21 2009, 10:25
Сообщение #1


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

Группа: Свой
Сообщений: 152
Регистрация: 11-10-05
Из: Воронеж
Пользователь №: 9 491



пишу проект под LPC2478 + FreeRTOS, столкнулся со следующей проблемой - при использовании аппаратных прерываний (VIC) при каких-то условиях происходит их полное отключение. то есть, в отладчике видно, что все нужные регистры VIC сконфигурированы, биты прерываний установлены, VicAddress показывает куда надо - но прерывания не происходят, то есть процессор тупо стоит в пустом цикле. Отследить все как следует не удается, проблемы начались, вроде бы, когда я задействовал прерывания модуля USB, но четкой связи не вижу, развязка с операционкой сделана вроде бы так же, как во всех остальных модулях. Может быть, есть какая-то стандартная ошибка, которую делают все новички, или особенность этого ядра? До этого работал с STR710, там ничего подобного не наблюдалось
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
GetSmart
сообщение Jan 21 2009, 10:29
Сообщение #2


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Телепатически трудно угадать что Вы как новичёк забыли сделать.
Версия №1
Забыли записать VICVectAddr = 0 в конце прерывания для сброса приоритетов в VIC ?


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
sergik_vrn
сообщение Jan 21 2009, 10:38
Сообщение #3


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

Группа: Свой
Сообщений: 152
Регистрация: 11-10-05
Из: Воронеж
Пользователь №: 9 491



Цитата(GetSmart @ Jan 21 2009, 13:29) *
Телепатически трудно угадать что Вы как новичёк забыли сделать.
Версия №1
Забыли записать VICVectAddr = 0 в конце прерывания для сброса приоритетов в VIC ?

все прерывания сделаны следующим образом (в соответствии с портом FreeRTOS):

usb_isr.s79
Код
        RSEG ICODE:CODE
        CODE32

        EXTERN vUSB_ISR
        PUBLIC vUSB_ISREntry

vUSB_ISREntry:

    portSAVE_CONTEXT        ; Save the context of the current task.

    LDR R0, =vUSB_ISR
    mov     lr, pc
    BX R0

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


usb_main.c
Код
BOOL USB_isr()
{
    if (USBINTS & 0x00000008)
    {
        u32 int_status    = HCINTERRUPTSTATUS;
        u32 ie_status     = HCINTERRUPTENABLE;

        if (!(int_status & ie_status))
            return FALSE;
        else
        {
            int_status = int_status & ie_status;
            if (int_status & OR_INTR_STATUS_RHSC)
            {                 /* Root hub status change interrupt     */
                if (HCRHPORTSTATUS1 & OR_RH_PORT_CSC)
                {
                    if (HCRHPORTSTATUS1 & OR_RH_PORT_CCS)
                        HOST_RhscIntr = 1;
                    else
                        HOST_RhscIntr = 0;
                    HCRHPORTSTATUS1 = OR_RH_PORT_CSC;
                }
                if (HCRHPORTSTATUS1 & OR_RH_PORT_PRSC)
                    HCRHPORTSTATUS1 = OR_RH_PORT_PRSC;
            }
            if (int_status & OR_INTR_STATUS_WDH)  // Writeback Done Head interrupt
                HOST_WdhIntr = 1;
            HCINTERRUPTSTATUS = int_status;   // Clear interrupt status register
        }
    }

    return FALSE; // context switch?
}

// ********************************************************************
// ********************************************************************
// USB ISR.  This can cause a context switch
// The interrupt service routine - called from the assembly entry point.
extern "C" void vUSB_ISR( void );
void vUSB_ISR( void )
{
    // If a task was woken by either a character being received or a character
    // being transmitted then we may need to switch to another task.
    portEND_SWITCHING_ISR(USB_isr());

    // End the interrupt in the EIC
    VICADDRESS = 0; // clear interrupt
}



Цитата(aaarrr @ Jan 21 2009, 13:31) *
Проверьте, всегда ли VIC сбрасывается записью в VICVecAddr по окончании обслуживания прерывания.

сбрасывается вроде бы всегда. но вообще, я не совсем понимаю этот механизм, в даташите написано очень коротко и расплывчато, что подразумевается под "в конце прерывания", можно ли считать точку перед выполнением portRESTORE_CONTEXT концом прерывания?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 21 2009, 10:45
Сообщение #4


Гуру
******

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



Цитата(sergik_vrn @ Jan 21 2009, 13:38) *
сбрасывается вроде бы всегда. но вообще, я не совсем понимаю этот механизм, в даташите написано очень коротко и расплывчато, что подразумевается под "в конце прерывания", можно ли считать точку перед выполнением portRESTORE_CONTEXT концом прерывания?

Возьмите даташит на сам VIC - там все расписано весьма подробно.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- sergik_vrn   почему может сботь контроллер прерываний VIC?   Jan 21 2009, 10:25
|- - sergik_vrn   Цитата(aaarrr @ Jan 21 2009, 13:45) Возьм...   Jan 21 2009, 10:46
- - aaarrr   Проверьте, всегда ли VIC сбрасывается записью в VI...   Jan 21 2009, 10:31
- - GetSmart   Сбрасывать нужно когда между этой командой и выход...   Jan 21 2009, 10:49
|- - sergik_vrn   Цитата(GetSmart @ Jan 21 2009, 13:49) Сбр...   Jan 21 2009, 10:56
|- - aaarrr   Цитата(sergik_vrn @ Jan 21 2009, 13:56) а...   Jan 21 2009, 11:11
- - Сергей Борщ   Цитата(sergik_vrn @ Jan 21 2009, 12:25) п...   Jan 21 2009, 11:20
- - sergik_vrn   Цитата(Сергей Борщ @ Jan 21 2009, 14:20) ...   Jan 21 2009, 11:28
|- - Сергей Борщ   Цитата(sergik_vrn @ Jan 21 2009, 13:28) к...   Jan 21 2009, 11:36
|- - sergik_vrn   Цитата(Сергей Борщ @ Jan 21 2009, 14:36) ...   Jan 21 2009, 11:59
|- - Сергей Борщ   Цитата(sergik_vrn @ Jan 21 2009, 13:59) а...   Jan 21 2009, 12:26
|- - sergik_vrn   Цитата(Сергей Борщ @ Jan 21 2009, 15:26) ...   Jan 21 2009, 13:41
- - aaarrr   Цитата(Сергей Борщ @ Jan 21 2009, 14:20) ...   Jan 21 2009, 11:29


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

 


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


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