烧到片子里面可以~仿真时如果在定时器中断里面设置一个断点,完了如果按下一下iar软件复位的按钮以后就再以不能中断了~怎么回事?<br /><br />void AT91F_TC_Open ( AT91PS_TC TC_pt, unsigned int Mode, unsigned int TimerId) <br />//* Begin <br />{ <br /> unsigned int dummy; <br /> <br /> //* First, enable the clock of the TIMER <br /> <br /> AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC,1<< TimerId); <br /> <br /> //* Disable the clock and the interrupts <br /> TC_pt->TC_CCR = AT91C_TC_CLKDIS ; <br /> TC_pt->TC_IDR = 0xFFFFFFFF ; <br /><br /> //* Clear status bit <br /> dummy = TC_pt->TC_SR; <br /> //* Suppress warning variable "dummy" was set but never used <br /> dummy = dummy; <br /> //* Set the Mode of the Timer Counter <br /> TC_pt->TC_CMR = Mode ; <br /><br /> //* Enable the clock <br /> TC_pt->TC_CCR = AT91C_TC_CLKEN ; <br />//* End <br />} <br /><br />//*------------------------- Interrupt Function ------------------------------- <br /><br />//*---------------------------------------------------------------------------- <br />//* Function Name : timer0_c_irq_handler <br />//* Object : C handler interrupt function called by the interrupts <br />//* assembling routine <br />//* Output Parameters : increment count_timer0_interrupt <br />//*---------------------------------------------------------------------------- <br />__ramfunc void timer0_c_irq_handler(void) <br />{ <br /> AT91PS_TC TC_pt = AT91C_BASE_TC0; <br /> unsigned int dummy; <br /> //* Acknowledge interrupt status <br /> dummy = TC_pt->TC_SR; <br /> //* Suppress warning variable "dummy" was set but never used <br /> dummy = dummy; <br /> count_timer0_interrupt++; <br /> <br /> <br /> AT91F_PIO_SetOutput(AT91C_BASE_PIOA,PORTTmp[1]); //恢复最后一次IO口状态 <br /> AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,~PORTTmp[1]); <br /> <br /> R_Status^=BIT0; <br /> <br /> if (R_Status&BIT0) <br /> { <br /> AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,BIT7); <br /> <br /> } <br /> else <br /> { <br /> AT91F_PIO_SetOutput(AT91C_BASE_PIOA,BIT7); <br /> <br /> } <br /> AT91F_PIO_SetOutput(AT91C_BASE_PIOA,LE1); //打开片选 <br /> AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,LE1); //关闭片选 <br /> <br /> <br /> PORTTmp[1]=(AT91C_BASE_PIOA->PIO_ODSR&0x000000ff); //保存最后一次锁存后输出口状态 <br /> <br /> <br /><br /> <br /> <br />} <br /><br /><br />//*-------------------------- External Function ------------------------------- <br /><br />//*---------------------------------------------------------------------------- <br />//* Function Name : timer_init <br />//* Object : Init timer counter <br />//* Input Parameters : none <br />//* Output Parameters : TRUE <br />//*---------------------------------------------------------------------------- <br />void timer_init ( void ) <br />//* Begin <br />{ <br /> //init the timer interrupt counter <br /> count_timer0_interrupt=0; <br /><br /> //* Open timer0 <br /> <br /> AT91F_TC_Open(AT91C_BASE_TC0,TC_CLKS_MCK1024|AT91C_TC_WAVESEL_UP_AUTO|AT91C_TC_WAVE,AT91C_ID_TC0); <br /> <br /> AT91C_BASE_TC0->TC_RC=46928; <br /><br /> //* Open Timer 0 interrupt <br /> AT91F_AIC_ConfigureIt ( AT91C_BASE_AIC, AT91C_ID_TC0, TIMER0_INTERRUPT_LEVEL,AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL, timer0_c_irq_handler); <br /> AT91C_BASE_TC0->TC_IER = AT91C_TC_CPCS; // IRQ enable CPC <br /> AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_TC0); <br /> <br /> //* Start timer0 <br /> AT91C_BASE_TC0->TC_CCR = AT91C_TC_SWTRG ; <br /><br /><br />//* End <br />} <br /><br />主频大约48m,中断1s一次~ <br /> |
|