Página 1 de 1

Interrupção externa e rtos

MensagemEnviado: 20 Jul 2010 13:57
por verd
Olá companheiros!! entou dando uma fuçada no cortex com rtos, estou tentando implementar uma interrupção externa, o problema é que ao executar a interrupção eu travo o andamento do programa!

Existem alguma regra basica para funcionar em rtos? estou aprendendo rtos dando uma fuçada pela net, to bem perdido ainda, batendo cabeça!!

alguem tem algum palpite?


Código: Selecionar todos
void BUTTON_init(void) {
  LPC_GPIO2->FIODIR      &= ~(1 << 10);    /* PORT2.10 defined as input       */
  LPC_GPIOINT->IO2IntEnF |=  (1 << 10);    /* enable falling edge irq         */

  NVIC_EnableIRQ(EINT3_IRQn);              /* enable irq in nvic              */
}



void EINT3_IRQHandler()
{
LPC_GPIO2->FIOSET =0xffffffff;
delay(10);
LPC_GPIO2->FIOCLR =0xffffffff;

LPC_GPIOINT->IO2IntClr |= (1 << 10);     /* clear pending
}

MensagemEnviado: 20 Jul 2010 15:48
por barboza
Delay dentro da interrupção????????


Usando RTOS você pode enviar uma mensagem (ou flag, não sei qual RTOS esta usando) para uma task que ao receber, faça o que quer com o delay no meio.


Código: Selecionar todos
void IRQ_Handle()
{
   sendmsg(xyz);
}

void task_toogle_pin()
{
  while (1)
  {
     if (waitmsg(xyz))
     {
        pin=1;
        waitdelay(10);
        pin=0;
      }
   }
}

MensagemEnviado: 20 Jul 2010 16:32
por verd
Fala barboza!! to usando o RL-arm da keil!! o delay era só pra ver se o pino mudava de estado!!

ceto! tipo o esquema do mailbox! vou dar uma estudada nisso!! valeu!!!

MensagemEnviado: 20 Jul 2010 16:45
por verd
acho q to viajando! hehe!! no caso de uma interrupção externa ela apenas irá setar um flag e não executar uma ação certo? to achando que é igual a rotina de interrupção do PIC!