ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
24 ноября
64499
Vit2005 (03.08.2006 18:35, просмотров: 2622)
LPC2138 и прерывания таймера 0 Странная вещь происходит после 7145-го прерывания таймера 0 0000005Bh 1 0000005Ch 2 0000005Ah 3 0000005Bh 4 ..... 0000005Ch 7143 0000005Ch 7144 0000005Ch 7145 0000005Ch 5 0000005Ch 2 0000005Ch 32337 0000005Ah 32338 0000005Ch 1073745593 0000005Ah 3 0000005Ah 4 Повторяемось 100%. После 7145-го прерывания таймера 0 всегда получается мусор. Не пойму где могут быть грабли. #define _VIC_TIMER0 4 #define _VIC_ENABLE (1 << 5) #define SAMPLES_PER_SECOND (300) // ULONG cntISR =0; // void timer0_ISR(void) { INTERRUPT_ENTRY(); // check the interrupt sources if(T0IR & 1) { // clear MR0 Interrupt T0IR |= 1; tprintf("\n\r%08Xh %lu",T0TC,++cntISR); } VICSoftIntClr = (1<<_VIC_TIMER0); VICVectAddr = 0x00000000; // clear this interrupt from the VIC INTERRUPT_EXIT(); } // int main (void) { /* Initialize the system */ Initialize(); uart0Init(B115200,UART_8N1,UART_FIFO_14); /* Initialize timer0 */ // set prescaler T0PR = 0; // reset timer T0TCR = 2; // start timer T0TCR = 1; // setup timer0 for IRQ VICIntSelect &= ~(1<<_VIC_TIMER0); // assign VIC slot VICVectCntl4 = _VIC_ENABLE | _VIC_TIMER0; VICVectAddr4 = (unsigned long )timer0_ISR; // enable interrupt VICIntEnable |= (1<<_VIC_TIMER0); // setup MR0 value T0MR0 = (FOSC*PLL_M)/SAMPLES_PER_SECOND; // enable timer0 interrupt and reset on MR0 match T0MCR |= 3; /* Enable interrupts */ EnableIRQ(); // for(;;); } /* EOF */