Затрахался...помогите...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)