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

 
 
> проблема - uCos и USART IRQ handler, не могу нормально запустить свой обработчик прерывания в uCos-e
_dem
сообщение Mar 2 2007, 16:14
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 263
Регистрация: 2-02-07
Из: CN, Ukraine
Пользователь №: 24 970



Добрый день, уважаемый ALL

Разбираюсь с micrium OS - пожалуйста, ткните носом в страницу мануала.
мозги уже кипят - видимо, чего-то упорно не хотят замечать sad.gif

Проблема в следующем - при попытке навесить свой обработчик прерывания на ком-порт под uCos-ом задача работает до первого вызова OSTimeDlyHMSM(), потом все зависает в цикле OS_TaskIdle().

вот код, запускающий обработчик

Код
    AT91F_AIC_ConfigureIt( AT91C_BASE_AIC,   AT91C_ID_US0, 7 , AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL  | AT91C_AIC_PRIOR_LOWEST, usart0_irq_handler);  
    AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_US0);


вот сам обработчик

Код
void usart0_irq_handler(void)
{
        // calling irq processor
        if (_comports [ 0 ])
                {
                 _comports [ 0 ] -> __irq_processor();
                }
/////////////////////
    unsigned long rx_data                     = AT91C_BASE_PITC->PITC_PIVR;   /* Read the interrupt source, ignore the value*/

    AT91C_BASE_AIC->AIC_IVR     = 0;                            /* Debug variant of IVR (protect mode is used)*/
    AT91C_BASE_AIC->AIC_ICCR    = AT91C_ID_US0;                 /* Clear  USART0 interrupt                    */
    AT91C_BASE_AIC->AIC_EOICR   = 0;                            /* Signal end of interrupt                    */

       //* Reset the satus bit
AT91C_BASE_US0->US_CR = AT91C_US_RSTSTA;  

}


Если убрать вызов
Код
AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_US0);

т.е. не включать прерывание в AIC, то все работает - понятно, кроме собственно обработчика.

видимо, ошибся в обработчике, но не могу понять - где ?

----
добавил в обработчик вызовы OSIntEnter() / OSIntExit() - не помогло sad.gif

Сообщение отредактировал _dem - Mar 2 2007, 16:56
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Tahoe
сообщение Apr 6 2007, 05:59
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 459
Регистрация: 30-03-06
Из: Москва
Пользователь №: 15 600



dem
Понятно. Я пока тоже до конца не разобрался с прерываниями. На данный момент вроде работает. Но некоторые траблы остались. Например сейчас из ddf выкинул AIC_IVR, вроде как работает. Но вылезла другая бяка. Если включен в IAR-е uCOS-плугин, то всё работает до первой остановки дебага. Потом уже не запускается. Но теперь я хоть регистры AIC вижу, так что разберусь попозже. smile.gif


Кстати, интересно, это только у меня такая бяка: если дебаг остановлен в хендлере прерывания, то при попытке посмотреть в "хинте" значение локальной переменной IAR 4.41a просто падает. Попробовал, снёс папку settings в проекте, но не помогло. Сама пременная static int16u.
Go to the top of the page
 
+Quote Post
Velund
сообщение Apr 8 2007, 18:41
Сообщение #3


Знающий
****

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



Цитата(Tahoe @ Apr 6 2007, 06:59) *
Если включен в IAR-е uCOS-плугин, то всё работает до первой остановки дебага. Потом уже не запускается. Но теперь я хоть регистры AIC вижу, так что разберусь попозже. smile.gif


Я наступал на подобные грабли (на LPC2129) - вылечилось небольшой модификацией тикера (переходом с free-running timer на сброс при досчете). Не самое лучшее что можно придумать, таймер для другого не попользуешь, но по крайней мере он быстро "подхватывает" инты после останова.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- _dem   проблема - uCos и USART IRQ handler   Mar 2 2007, 16:14
- - AlexBoy   Там цепочка вызовов такая: с вектора 0x18 вызввает...   Mar 2 2007, 19:55
|- - _dem   с этим я разобрался, спасибо но все равно не рабо...   Mar 5 2007, 11:48
|- - AlexBoy   Цитата(_dem @ Mar 5 2007, 10:48) с этим я...   Mar 5 2007, 13:06
|- - _dem   Цитата(AlexBoy @ Mar 5 2007, 14:06) Цитат...   Mar 5 2007, 13:13
|- - AlexBoy   Цитата(_dem @ Mar 5 2007, 12:13) ситуация...   Mar 5 2007, 19:08
|- - _dem   пока ничего нового роюсь в документации и сырцах ...   Mar 6 2007, 10:46
|- - AlexBoy   По функциям, то что нужно добавить: InitUSART: 1. ...   Mar 6 2007, 13:26
|- - _dem   оно все так и сделано, а OSTick() вызывается в ста...   Mar 7 2007, 12:13
- - _dem   проблема решена радикально - переходом на FreeRTOS...   Mar 14 2007, 10:16
- - Tahoe   Такой вопрос назрел. А кто как "дебажится...   Apr 3 2007, 07:55
|- - _dem   Цитата(Tahoe @ Apr 3 2007, 08:55) Такой в...   Apr 3 2007, 09:21
|- - Сергей Борщ   Цитата(Tahoe @ Apr 3 2007, 06:55) А пробл...   Apr 3 2007, 12:28
- - Dron_Gus   Можно еще protected mode использовать для AIC...   Apr 3 2007, 12:28
- - Tahoe   ЦитатаМожно еще protected mode использовать для AI...   Apr 3 2007, 14:27
|- - _dem   Цитата(Tahoe @ Apr 3 2007, 14:27) 2 _dem ...   Apr 5 2007, 18:23
|- - SpiritDance   Цитата(_dem @ Apr 5 2007, 19:23) Порт LwI...   Apr 6 2007, 09:43
- - _dem   Цитатапри попытке посмотреть в "хинте" з...   Apr 6 2007, 10:09
- - Tahoe   Цитата(_dem @ Apr 6 2007, 11:09) именно в...   Apr 6 2007, 17:15


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

 


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


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