Перейти к содержанию
    

EWARM 4.20a отладка с Wiggler

Добрый день!

 

Ситуация: ewarm-4.20a + wiggler. Отлаживаю uCOS-II для Olimex LPC E2124 . В случае, если ОС запускается из флэш - таймер тикает.

Когда отлаживаюсь из C-spy один раз срабатывает прерывание от таймера0 и прерывание не сбрасывается.

 

Вот код обработчика:

void  Tmr_TickISR_Handler (void)
{
   T0IR        = 0xFF;                 /* Clear timer #0 interrupt                                    */
   OSTimeTick();                       /* If the interrupt is from the tick source, call OSTimeTick() */
   #ifdef DEBUG_IAR_SIM_EN
   VICVectAddr = (INT32U)Tmr_TickISR_Handler;
   #else
   VICVectAddr = 0;        /*  */
   #endif
}

 

Код настройки таймера:

void  Tmr_TickInit (void)
{
                                                /* VIC TIMER #0 Initialization                        */
   VICIntSelect &= ~(1 << VIC_TIMER0);          /* Enable interrupts                                  */

   VICVectAddr2  = (INT32U)Tmr_TickISR_Handler; /* Set the vector address                             */
   #ifdef DEBUG_IAR_SIM_EN
   VICVectAddr = (INT32U)Tmr_TickISR_Handler;  // Simulate VIC
   #endif

   VICVectCntl2  = 0x20 | VIC_TIMER0;           /* Enable vectored interrupts                         */
   VICIntEnable  =  (1 << VIC_TIMER0);          /* Enable Interrupts                                  */

   T0TCR         = 0;                           /* Disable timer 0.                                   */
   T0PC          = 0;                           /* Prescaler is set to no division.                   */
   T0MR0         = CPU_PERIPHERAL_CLK_FREQ / OS_TICKS_PER_SEC;  /* Count up to this value.            */
   T0MCR         = 3;                           /* Reset and interrupt on MR0 (match register 0).     */
   T0CCR         = 0;                           /* Capture is disabled.                               */
   T0EMR         = 0;                           /* No external match output.                          */
   T0TCR         = 1;                           /* Enable timer 0                                     */
}

 

В чём жучок?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А прерывание в системе только одно?

А OS_CPU_IRQ_ISR_Handler можно посмотреть?

 

У меня оно вот такое:

 

typedef void (*PFNCT)(void);

void OS_CPU_IRQ_ISR_Handler (void)

{

PFNCT pfnct;

 

pfnct = (PFNCT)VICVectAddr; /* Read the interrupt vector from the VIC */

while (pfnct)

{ /* Handle ALL interrupting devices */

(*pfnct)(); /* Call ISR for interrupting device */

VICVectAddr = 0; /* update priority hardware */

 

pfnct = (PFNCT)VICVectAddr; /* Read the interrupt vector from the VIC */

}

}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Прерывание одно.

 

Но дело скорее всего в среде разработки. Потому как под 3.21а работает без проблем и с двумя прерыванями. Прадва грузится по Wiggler-у немного медленее.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...