Затрахался...помогите...LPC2124 Нет прерывания по опустошение трасмит холд регистра... в чем дело.. делаю так..
void UART0Put(uint8 Data) { uint8 temp; QueueWrite((void *)UART0SendBuf, Data); //сую байт в очередь if ((U0LSR & 0x00000020) != 0) //если холд регистр пуст { QueueRead(&temp, UART0SendBuf); // читаю из байт из очереди U0THR = temp; //передаю байт в холд регистр U0IER = U0IER | 0x02; //разрешаю прерывание по опустошению.. } }И прерывания по опустошению нет никогда.. че -делать то??? Прерывание по таймауту и приему есть... а по передачи нет!! Где ошибка может быть? Обработка прерывания...
void UART0_Exception(void) { uint8 IIR, temp, i; while(((IIR = U0IIR) & 0x01) == 0) // прерывания по UART есть { switch (IIR & 0x0e) // проверяем какое { case 0x02: //по опустошению ЕГО НЕТ!!!!! for (i = 0; i < UART0_FIFO_LENGTH; i++) { if (QueueRead(&temp, UART0SendBuf) == QUEUE_OK) { U0THR = temp; } else { U0IER = U0IER & (~0x02); } } break; case 0x04: // по приему OSSemPost(Uart0Sem); U0IER = U0IER & (~0x01); break; case 0x06: temp = U0LSR; break; case 0x0c: // по таймауту OSSemPost(Uart0Sem); U0IER = U0IER & (~0x01); break; default : break; } } }
-
- Этот код работает.. ytrem(4320 знак., 25.07.2004 20:29)
- Спасибо... - lamerok(26.07.2004 10:30)
- Этот код работает.. ytrem(4320 знак., 25.07.2004 20:29)