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 + -
显示快捷键?