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

 
 
> LPC2124 проблема с прерыванием на UART THRE
MALLOY2
сообщение Feb 21 2007, 14:51
Сообщение #1


Знающий
****

Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317



При включении прерывания U0IER_bit.THREIE = 1 не происходит прерывание при этом в U0LSR бит THRE и TEMT установлины. Происходит только после того как что то запишеш в U0THR. Я уже замучялся...

Код инициализации:

Код
    ubuff = &u0buff;
       ubuff->tx_buff = u0_buff_tx;
       ubuff->rx_buff = u0_buff_rx;
    ubuff->tx_buff_size = sizeof(u0_buff_tx);
    ubuff->rx_buff_size = sizeof(u0_buff_rx);
    PCONP_bit.PCURT0 = 1; //UART power on
    PINSEL0_bit.P0_0 = 1;//select pin for UART0  
    PINSEL0_bit.P0_1 = 1;
    U0FCR = 0xC1;
    uart_bautrate(UART0,32);
    U0LCR = 0x03; //1-8-N
    INT_Plug(UART0_ISR,VIC_UART0,IRQ_int,IRQ_Slot0);
    VIC_IntEnable(BIT(VIC_UART0));
    U0IER_bit.RDAIE = 1;
    U0IER_bit.RXLSIE = 1;


код функции передачи


Код
int uart_send_str(TUartChanel dev, const char* data)
{
  TUART_BUFF* ubuff;
  int len,fsize,head,i;
  unsigned long old_irq;
  char *ptr;
  ubuff = &u0buff;
  fsize = 0;
  len = strlen(data);
  ptr = (char*)data;
  do
   {
    do fsize = uart_tx_free(dev); while(fsize == 0);
    if (fsize > len) fsize = len;
    head = ubuff->tx_head;
    for (i=0;i<fsize;i++)
     {
      ubuff->tx_buff[head] = *ptr++;
      if(++head == ubuff->tx_buff_size) head = 0;
     }
    ubuff->tx_head = head;
    old_irq = disable_IRQ();
    ubuff->tx_size = ubuff->tx_size+i;
    restore_IRQ(old_irq);
    U0IER_bit.THREIE = 1; //<= включаем прерывание и оно не происходит
    len = len - fsize;    
   }
  while((*ptr!='\0')&&(len > 0));
  return(0);
};


код main

Код
  //U0THR = 0x00;  //<- если включить эту строку UART начинает генерить прерывания
  while(1)
   {
     uart_send_str(UART0,"HELLO WORD");
   }





Код обработчика:

Код
void UART0_ISR (void)
{
unsigned int tmp;
TUART_BUFF* ubuff = &u0buff;  
switch((U0IIR>>1)&0x7)
  {
   case IIR_THRE:   // continue sending data
        if (ubuff->tx_size == 0)U0IER_bit.THREIE = 0;
        else
         {
          U0THR = ubuff->tx_buff[ubuff->tx_tail];  
          ubuff->tx_size--;
          if (++ubuff->tx_tail == ubuff->tx_buff_size) ubuff->tx_tail = 0;
         }  
        break;
   case IIR_RSL:    
        tmp = U0LSR;
        ubuff->last_error |= tmp & 0x9E;
        break;
   case IIR_RDA:    // receive data
   case IIR_CTI:    // time out
        tmp = U0RBR;
        if (ubuff->eho_state == ON)
         {
          while(!U0LSR_bit.THRE);
          U0THR = tmp;
         };    
        if ((tmp == 0x0D) || (tmp == 0x0A)) ubuff->str_flag = 1;
        if (ubuff->rx_size == (ubuff->rx_buff_size-1))
         {
          ubuff->last_error |= RC_FIFO_OVERRUN_ERR;
         }
        else
         {
          ubuff->rx_buff[ubuff->rx_head] = tmp;    
          ubuff->rx_size++;
          if (++ubuff->rx_head == ubuff->rx_buff_size) ubuff->rx_head = 0;
         }
        break;
   }//switch
}  //isr
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- MALLOY2   LPC2124 проблема с прерыванием на UART THRE   Feb 21 2007, 14:51
- - DASM   Читаем. Внимательно. The UART0 THRE interrupt (U0I...   Feb 21 2007, 15:07
- - Сергей Борщ   Цитата(MALLOY2 @ Feb 21 2007, 13:51) При ...   Feb 21 2007, 15:13
- - MALLOY2   Вот кривизна, одно растройство, придется драйвер п...   Feb 21 2007, 15:43
|- - Сергей Борщ   Цитата(MALLOY2 @ Feb 21 2007, 14:43) а чт...   Feb 21 2007, 15:56
|- - Alex03   Цитата(MALLOY2 @ Feb 21 2007, 17:43) Вот ...   Feb 21 2007, 17:19
|- - Alex03   Цитата(Alex03 @ Feb 21 2007, 19:19) Если ...   Feb 21 2007, 17:30
- - MALLOY2   Цитата7:6 Rx Trigger Level Select 00: trigger leve...   Feb 21 2007, 16:19
|- - Сергей Борщ   Цитата(MALLOY2 @ Feb 21 2007, 15:19) а эт...   Feb 21 2007, 17:23
- - MALLOY2   ЦитатаК какому кривому? Мой примерный перевод (уск...   Feb 21 2007, 17:41
|- - zltigo   Цитата(MALLOY2 @ Feb 21 2007, 16:41) но у...   Feb 21 2007, 18:25
|- - Alex03   Цитата(zltigo @ Feb 21 2007, 20:25) Цитат...   Feb 22 2007, 08:38
|- - zltigo   Цитата(Alex03 @ Feb 22 2007, 07:38) ИМХО ...   Feb 22 2007, 09:22
|- - Alex03   Цитата(zltigo @ Feb 22 2007, 11:22) Цитат...   Feb 22 2007, 10:44
- - MALLOY2   ЦитатаНу а потом пауза в передаче и ..... кто пино...   Feb 21 2007, 18:38
|- - zltigo   Цитата(MALLOY2 @ Feb 21 2007, 17:38) Это ...   Feb 21 2007, 20:36
|- - Сергей Борщ   Цитата(zltigo @ Feb 21 2007, 19:36) После...   Feb 21 2007, 22:22
|- - zltigo   Цитата(Сергей Борщ @ Feb 21 2007, 21:22) ...   Feb 21 2007, 22:40
|- - smac   Цитата(zltigo @ Feb 22 2007, 01:40) .. ре...   Nov 29 2009, 15:42
- - MALLOY2   ЦитатаВ "идеальном" с Вашей точки зрения...   Feb 22 2007, 01:08
|- - zltigo   Цитата(MALLOY2 @ Feb 22 2007, 00:08) но к...   Feb 22 2007, 01:51
- - MALLOY2   Цитатаи нигде небыло проблем. Их нет и в LPC, ес...   Feb 22 2007, 12:18
|- - gladov   Цитата(MALLOY2 @ Feb 22 2007, 12:18) врям...   Feb 22 2007, 12:44
||- - zltigo   Цитата(gladov @ Feb 22 2007, 11:44) У Вас...   Feb 22 2007, 18:24
|- - zltigo   Цитата(MALLOY2 @ Feb 22 2007, 11:18) а у ...   Feb 22 2007, 18:12
- - MALLOY2   результат такой же , и АRM имеет команды которые ...   Feb 22 2007, 13:20


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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 12:23
Рейтинг@Mail.ru


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