lcodu_interrupth.c

来自「卫星接受机控制卫星和LCD显示」· C语言 代码 · 共 228 行

C
228
字号
//*----------------------------------------------------------------------------
//* File Name           : lcodu_interrupth.c
//* Object              : 中断处理程序
//*
//* Creation            : wzm   11/10/2007
//*  Modif              : wp    26/10/2007
//*----------------------------------------------------------------------------


//*-----------------------------------------------------------------------------
//* Function Name       : timer0_c_irq_handler
//* Object              : Timer0 interrupt service routine,8ms,
//*                       used for rssi reporting
//* autor               : wang ping
//* Input Parameters    : none
//* Output Parameters   : none
//*-----------------------------------------------------------------------------
__ramfunc void Delay_key (unsigned int a) { while (--a!=0); }

__ramfunc void timer0_c_irq_handler(void)  
{


   unsigned int dummy;
    //* Acknowledge interrupt status
    dummy = AT91C_BASE_TC0->TC_SR;
    //* Suppress warning variable "dummy" was set but never used
    dummy = dummy;
       
    /*if ( (AT91C_BASE_PIOA->PIO_PDSR & PA8_LED ) == PA8_LED )  //
    {
        AT91C_BASE_PIOA->PIO_CODR= PA8_LED;
    }
    else
    {
        AT91C_BASE_PIOA->PIO_SODR= PA8_LED;;
    }*/

     timer0_flag=1;
}


//*-----------------------------------------------------------------------------
//* Function Name       : timer1_c_irq_handler
//* Object              : Timer1 interrupt service routine,
//*                       used for cheching the TX input alarm
//* autor               : wang ping
//* Input Parameters    : none
//* Output Parameters   : none
//*-----------------------------------------------------------------------------
__ramfunc void timer1_c_irq_handler(void)
{

  unsigned int dummy;
  
    //* Acknowledge interrupt status
    dummy = AT91C_BASE_TC1->TC_SR;
    //* Suppress warning variable "dummy" was set but never used
    dummy = dummy;
   
  //alarm_flag=0;
      

}


//*-----------------------------------------------------------------------------
//* Function Name       : US0_c_irq_handler
//* Object              : USART0 interrupt service routine,
//*                       reset the DMA buffer pointer.
//* autor               : wang ping
//* Input Parameters    : none
//* Output Parameters   : none
//*-----------------------------------------------------------------------------
__ramfunc void US0_c_irq_handler(void)
{

 AT91F_PDC_ReceiveFrame ( AT91C_BASE_PDC_US0 , (char *) &us0_recv_dma[0], MAX_RECV_BUF,0,0);
        
//* Reset the satus bit
	 AT91C_BASE_US0->US_CR = AT91C_US_RSTSTA;
         
 /* //led for test     
         if ( (AT91F_PIO_GetInput(AT91C_BASE_PIOA) & LED1 ) == LED1 )
    {
        AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, LED1 );
    }
    else
    {
        AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED1 );
    }
   */             
    

    
}


//*-----------------------------------------------------------------------------
//* Function Name       : US1_c_irq_handler
//* Object              : USART1 interrupt service routine,
//*                       reset the DMA buffer pointer.
//* autor               : wang ping
//* Input Parameters    : none
//* Output Parameters   : none
//*-----------------------------------------------------------------------------
__ramfunc void US1_c_irq_handler(void)
{


   

}


//*-----------------------------------------------------------------------------
//* Function Name       : ADC_c_irq_handler
//* Object              : ADC interrupt service routine,
//*                       reset the ADC DMA buffer pointer.
//*                       calculate the average value of the 16 converts of each 
//*                       channel 
//* autor               : wang ping
//* Input Parameters    : none
//* Output Parameters   : none
//*-----------------------------------------------------------------------------
//__ramfunc
void ADC_c_irq_handler(void)
{

}

//*-----------------------------------------------------------------------------
//* Function Name       : IRQ0_c_irq_handler
//* Object              : tx synthlock alarm
//*                       negative edge trige
//* autor               : wang ping  29/10/2007
//* Input Parameters    : none
//* Output Parameters   : none
//*-----------------------------------------------------------------------------
__ramfunc unsigned int keyboard_value(unsigned int key)
{
  unsigned char temp;
  int i;
  temp=(unsigned int)(key>>24);
  Delay_key(1000);
  if (key!= ((unsigned int)(AT91C_BASE_PIOA->PIO_PDSR) & 0x0F000000))
  {
  return (0);
  }
 
  AT91C_BASE_PIOA->PIO_SODR=row_3|row_2|row_1|row_0;
  for (i=0;i<4;i++)
  {
    AT91C_BASE_PIOA->PIO_CODR= 1<<(28+i);
    if(((unsigned int)(AT91C_BASE_PIOA->PIO_PDSR & 0x0F000000))==key)
    {
      break;
    }
    else
    {
      AT91C_BASE_PIOA->PIO_SODR=row_3|row_2|row_1|row_0;
    }
  }
  if (i>3)
  {
  return(0);
  }
  temp=(unsigned int) (i*16+temp);
  //if (num>=20)
    //num--;
  value[num++]=temp;
  key_flag=0x02;

return(1);
}

__ramfunc void keyboard_c_irq_handler(void)
{
   unsigned int ISR;
   unsigned int K_value;
   AT91F_disable_interrupt();
   
   ISR=(unsigned int)(AT91C_BASE_PIOA->PIO_ISR);
   //AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_PIOA;
   if((ISR & cow_3|cow_2|cow_1|cow_0)!=0)
   {
     K_value=(unsigned int)(AT91C_BASE_PIOA->PIO_PDSR);
     if(((K_value & 0x0F000000)!=0x0F000000) & (num<=20))
     {
       keyboard_value((K_value & 0x0F000000));
     
     }
     else
     {
       if (num>20)
         num--;
     }
     
     //key_flag=0x02;
   }
   
   AT91F_enable_interrupt();
}

//*-----------------------------------------------------------------------------
//* Function Name       : IRQ1_c_irq_handler
//* Object              : rx synthlock alarm
//*                       negative edge trige
//* autor               : wang ping  29/10/2007
//* Input Parameters    : none
//* Output Parameters   : none
//*-----------------------------------------------------------------------------
__ramfunc void IRQ1_c_irq_handler(void)
{
   //if((AT91C_BASE_PIOA->PIO_PDSR & BIT30 ) == BIT30 )
   {
     //v_odu_alarm[0]|=ALARM_RXSYNTHLOCK;
     //v_txmute=TX_MUTED;
     //set_mute(TX_MUTED);
     //alarm_flag=1;
   }
  /* else
   {
     v_odu_alarm[0]&=NORMAL_RXSYNTHLOCK;
     v_rpsalarm&=NORMAL_RXSYNTHLOCK;
   }*/
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?