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();
}