ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
1 июля
73766 Топик полностью
MiniMax (09.11.2006 14:32, просмотров: 1) ответил Vit на LPC2138. TEMT в U0LSR в обработчике прерывания UART0 - не вваливаюсь
Мой вариант UART0 RX & TX прерывания см. внутри. Обрабатываются 2 кольцевых буфера: RX и TX /********************************************************************************************* ; Function: sci0_ISR ; ; Description: Interrupt Service Routine of RX\TX UART0 ; ; Inputs: Nothing ; ; Returns: Nothing ***********************************************************************************************/ void sci0_ISR(void) { INTERRUPT_ENTRY(); // check the interrupt sources while(!(U0IIR & _IIR0)) { if ((U0IIR & 0x04) == 0x04) { /* Process RX SOFTWARE FIFO */ SCI0_DATA.rxBuffer[SCI0_DATA.rxHead++] = uart0Getch(); if(SCI0_DATA.rxHead >= SCI0_RX_SOFT_FIFO_LENGTH) SCI0_DATA.rxHead =0; } else { /* Process TX SOFTWARE FIFO */ if(SCI0_DATA.txTail != SCI0_DATA.txHead) { uart0Putch(SCI0_DATA.txBuffer[SCI0_DATA.txTail++]); if(SCI0_DATA.txTail >= SCI0_TX_SOFT_FIFO_LENGTH) SCI0_DATA.txTail =0; } } // clear Interrupt U0IIR |= 1; } VICSoftIntClr = (1<<_VIC_UART0); VICVectAddr = 0x00000000; // clear this interrupt from the VIC INTERRUPT_EXIT(); }