ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
24 ноября
11811
lamerok (23.07.2004 07:49, просмотров: 1463)
Затрахался...помогите...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;
        }
    } 
}