jhoo 0 18 ноября, 2005 Опубликовано 18 ноября, 2005 · Жалоба Создал простейший проект на основе примера с портом для ат91 (AN-1014.pdf) Все сделал как положено, вот пример стартовой задачи: void StartTask (void *p_arg) { INT8U i; p_arg = p_arg; BSP_Init(); #if OS_TASK_STAT_EN > 0 OSStatInit(); #endif LED_Off(BSP_LED_ALL); timer_init (); // <--- после этого цикл внизу успевает прокрутиться 1 раз while (1) { for (i = 1; i <= 4; i++) { LED_On(i); OSTimeDlyHMSM(0, 0, 0, 50); LED_Off(i); } for (i = 1; i <= 4; i++) { LED_On(5 - i); OSTimeDlyHMSM(0, 0, 0, 50); LED_Off(5 - i); } } } Системные тики идут от PIT. Все работало прекрасно, пока не потребовалась работа с другой периферий, котрая использовала прерывания - UART и таймера 0,1. После этого почему-то прерывания перестали генерироваться совсем, в т.ч. и от PIT, поэтому в ОС критится только задача OS_TaskIdle. Проверял рабочйи пример который с портом, добавляя в него работу с другими прерываниями, результат тот же. Что я сделал не так? Вот обработчик прерываний, void OS_CPU_IRQ_ISR_Handler (void) { BSP_PFNCT pfnct; #if 1 pfnct = (BSP_PFNCT)AT91C_BASE_AIC->AIC_IVR; /* Read the interrupt vector from the VIC */ if (pfnct != (BSP_PFNCT)0) { /* Make sure we don't have a NULL pointer */ (*pfnct)(); /* Execute the ISR for the interrupting device */ } #else pfnct = (BSP_PFNCT)AT91C_BASE_AIC->AIC_IVR; /* Read the interrupt vector from the VIC */ while (pfnct != (BSP_PFNCT)0) { /* Make sure we don't have a NULL pointer */ (*pfnct)(); /* Execute the ISR for the interrupting device */ pfnct = (BSP_PFNCT)AT91C_BASE_AIC->AIC_IVR; /* Read the interrupt vector from the VIC */ } #endif } который вызывается из OS_CPU_IRQ_ISR. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jhoo 0 21 ноября, 2005 Опубликовано 21 ноября, 2005 · Жалоба Все,разобрался. Посмотрел атмеловский стартап (для ос использовал другой), они после обработки любых прерываний выполняли запись в EOICR. У меня же эта операция была только в обработчике PIT. Сделал так же и всё заработало. Вообщем сам виноват. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться