|
发表于 2010-8-11 19:37:04
|
显示全部楼层
extern void SpiADCUpdate(void);
extern void TimerCallback(void);
void timer0_c_irq_handler(void)
{
int temp = AT91C_BASE_TC0->TC_SR;
temp = temp;
TimerCallback();
// AT91C_BASE_ADC->ADC_CR = 0x2;
// ADC_flag = 1;
// SpiADCUpdate();
// printfd("0");
}
extern OS_EVENT *semTimer50us;
extern OS_EVENT *semTimer2;
void timer1_c_irq_handler(void)
{
// static int flag=0;
int temp = AT91C_BASE_TC1->TC_SR;
temp = temp;
AT91F_AIC_DisableIt (AT91C_BASE_AIC, AT91C_ID_TC1);
OSSemPost(semTimer50us);
// if(flag){
// AT91F_PIO_SetOutput(AT91C_BASE_PIOA, LED1);
// }
// else{
// AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, LED1);
// }
// flag=(flag+1)&1;
// printf("1");
}
void timer2_c_irq_handler(void)
{
// static int flag=0;
int temp = AT91C_BASE_TC2->TC_SR;
if(temp&AT91C_TC_LDRAS)
{
}
// AT91F_AIC_DisableIt (AT91C_BASE_AIC, AT91C_ID_TC2);
// OSSemPost(semTimer2);
// if(flag){
// AT91F_PIO_SetOutput(AT91C_BASE_PIOA, LED2);
// }
// else{
// AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, LED2);
// }
// flag=(flag+1)&1;
// printf("2");
}
void AT91F_TC_Open ( AT91PS_TC TC_pt, unsigned int Mode, unsigned int TimerId)
{
unsigned int dummy;
//* First, enable the clock of the TIMER
AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1<< TimerId ) ;
//* Disable the clock and the interrupts
TC_pt->TC_CCR = AT91C_TC_CLKDIS ;
TC_pt->TC_IDR = 0xFFFFFFFF ;
//* Clear status bit
dummy = TC_pt->TC_SR;
//* Suppress warning variable "dummy" was set but never used
dummy = dummy;
//* Set the Mode of the Timer Counter
TC_pt->TC_CMR = Mode ;
//* Enable the clock
TC_pt->TC_CCR = AT91C_TC_CLKEN ;
}
void TimerInit0(void)
{
// Open timer0
AT91F_TC_Open(AT91C_BASE_TC0,AT91C_TC_CLKS_TIMER_DIV2_CLOCK|(1<<15)|(2<<13),AT91C_ID_TC0);
AT91C_BASE_TC0->TC_RC = MCK/8UL/100UL;//div:8 , 100Hz interrupt
// Open Timer 0 interrupt
AT91F_AIC_ConfigureIt(AT91C_BASE_AIC, AT91C_ID_TC0, TIMER0_INTERRUPT_LEVEL,AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL, timer0_c_irq_handler);
AT91C_BASE_TC0->TC_IER = AT91C_TC_CPCS; // IRQ enable CPC
AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_TC0);
// Generate interrupt by software
//AT91F_AIC_Trig (AT91C_BASE_AIC,AT91C_ID_TC0) ;
// Start timer0
AT91C_BASE_TC0->TC_CCR = AT91C_TC_SWTRG ;
}
void TimerInit1(void)
{
// Open timer1
AT91F_TC_Open(AT91C_BASE_TC1,AT91C_TC_CLKS_TIMER_DIV1_CLOCK|(1<<15)|(2<<13)|(AT91C_TC_CPCSTOP),AT91C_ID_TC1);
AT91C_BASE_TC1->TC_RC = MCK/2UL/20000UL;
// Open Timer 1 interrupt
AT91F_AIC_ConfigureIt(AT91C_BASE_AIC, AT91C_ID_TC1, TIMER1_INTERRUPT_LEVEL,AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL, timer1_c_irq_handler);
AT91C_BASE_TC1->TC_IER = AT91C_TC_CPCS; // IRQ enable CPC
// AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_TC1);
// Generate interrupt by software
// AT91F_AIC_Trig (AT91C_BASE_AIC,AT91C_ID_TC1) ;
// Start timer1
// AT91C_BASE_TC1->TC_CCR = AT91C_TC_SWTRG ;
}
#if 0
void TimerInit2(void)
{
// Open timer2
AT91F_TC_Open(AT91C_BASE_TC2,AT91C_TC_CLKS_TIMER_DIV1_CLOCK|(1<<15)|(2<<13)|(AT91C_TC_CPCSTOP),AT91C_ID_TC2);
AT91C_BASE_TC2->TC_RC = MCK/2UL/20000UL;
// Open Timer 2 interrupt
AT91F_AIC_ConfigureIt(AT91C_BASE_AIC, AT91C_ID_TC2, TIMER2_INTERRUPT_LEVEL,AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL, timer2_c_irq_handler);
AT91C_BASE_TC2->TC_IER = AT91C_TC_CPCS; // IRQ enable CPC
}
#endif |
|