реклама на сайте
подробности

 
 
> lpc2134-01 не приходит прерывание uart CTI
HEX
сообщение May 22 2008, 18:45
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 54
Регистрация: 25-11-04
Из: Тула
Пользователь №: 1 228



Чего-то не приходят прерывания CTI от uart (работаю с uart0), если размер посылки >= RxFIFITrigerLevel. Если размер < все нормально. Модуль работы с uart перенес с lpc2292 там все работало. Попадалось сообщение в конфе про глюк в uart lpc2138, ни чего подробно не нашел. Искать у себя или проц такой? пожалуйста кто использует lpc213x отзовитесь.

Инициализация:
Код
#define RxFIFOTrigger8  0x80
...
{
  Word W;

  //Line control register
  U0LCR = ByteSize + StopBits + Parity;
  //BaudRate
  W = Fvpb/16/BaudRate;
  U0LCR = U0LCR | DivisorLatchAccessBit;    
  U0DLM = Hi(W);
  U0DLL = Lo(W);
  U0LCR = U0LCR & (~DivisorLatchAccessBit);    
  //FIFO
  U0FCR = RxFIFORstFlag + TxFIFORstFlag;
  U0FCR = FIFOEnableFlag + RxFIFOTrigger;
  // Set Interrupt Enable Register
  U0IER = RBRInterruptEnable + RLSInterruptEnable;
  //Инициализация вектора прерываний
  VICProtection = 0x00;                          
  //Установка вектора прерывания
  VICIntSelect &= ~(1<<VIC_UART0);                
  VICVectAddr6 = (unsigned long)&IRQHandler;    
  VICVectCntl6 = 0x20|VIC_UART0;                  
  VICIntEnable = VICIntEnable|(1<<VIC_UART0);    
  VICProtection = 0x01;
}


Обработчик прерывания:
Код
{
  Byte B;
  Byte Src;
  int i;

  do {
    Src = U0IIR;
    switch(Src & InterruptIDMask) {
      case RLSInterruptID: {
        DoOnRLSEvent(U0LSR);
        break;
      }
      case RDAInterruptID: {
        while ((U0LSR & ReceiverDataReady) != 0)
          FInQueue.Put(U0RBR);
        break;
      }
      case CTIInterruptID: {
        while ((U0LSR & ReceiverDataReady) != 0)
          FInQueue.Put(U0RBR);
        DoOnCTIEvent();
        break;
      }
      case THREInterruptID: {
        i = TxFIFODepth;
        do
        {
          if (FOutQueue.Get(&B)) {
            U0THR = B;
          }
          else {
            U0IER = U0IER & (~THREInterruptEnable);
            break;
          }
          i = i - 1;
        }
        while(i != 0);
        break;
      }
    }
  }
  while((Src & IntPendingFlag) == 0);
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th June 2025 - 07:28
Рейтинг@Mail.ru


Страница сгенерированна за 0.01448 секунд с 7
ELECTRONIX ©2004-2016