 MiniMax (09.11.2006 14:32, просмотров: 1) ответил Vit на LPC2138. TEMT в  U0LSR в обработчике прерывания UART0 - не вваливаюсь
 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();
}