LPC1768 + RS485

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
greenrat
Родился
Сообщения: 7
Зарегистрирован: Чт авг 09, 2012 10:08:14

Re: LPC1768 + RS485

Сообщение greenrat »

Прерывание

Код: Выделить всё

void UART0_IRQHandler (void) 
{
 uint8_t IIRValue, LSRValue;
  uint8_t Dummy = Dummy;
   
  IIRValue = LPC_UART0->IIR;
   
  IIRValue >>= 1;       
  IIRValue &= 0x07;     
       
  if ( IIRValue == IIR_RLS ) 
  {
    LSRValue = LPC_UART0->LSR;
    if ( LSRValue & (LSR_OE|LSR_PE|LSR_FE|LSR_RXFE|LSR_BI) )
    {
      UART0_Status = LSRValue;
      Dummy = LPC_UART0->RBR;
      return;
    }
    if ( LSRValue & LSR_RDR )         
    {
      buff_PutChar(0,LPC_UART0->RBR);
    }
  }
  else if ( IIRValue == IIR_RDA )
  {
       buff_PutChar(0,LPC_UART0->RBR);

  }
  else if ( IIRValue == IIR_CTI )
  {
    UART0_Status |= 0x100;       
  }
  else if ( IIRValue == IIR_THRE )
  {
      LSRValue = LPC_UART0->LSR;

   if (UART0_tx_rd_index<UART0_tx_counter)
      LPC_UART0->THR = UART0_tx_Buffer[UART0_tx_rd_index++];//Передаем
    else
   {
    UART0_tx_rd_index=0;
    UART0_tx_counter=0;
    rs485C0_RX;
   //  LPC_UART0->IER = IER_THRE | IER_RLS | IER_RBR;   // Re-enable RBR
   }

  }
}


Отсылка пакета

Здесь я запускаю процедуру отсылки - при каждом прерывании о том что байт отправлен - из прерывания отправляется следующий байт - и так до конца пакета

Код: Выделить всё

void RS485_StartTX(uint8_t PortNum)
{
 // LPC_UART0->IER = IER_THRE | IER_RLS;         //Disable RBR
  rs485C0_TX;
   UART0_tx_rd_index=0;   
   LPC_UART0->THR=UART0_tx_Buffer[UART0_tx_rd_index++];
}


Перекопал кучу сайтов на эту тему и даже на NXP был (надо кстати туда тоже этот вопрос написать) -
не только у меня подобная проблема - люди тоже бьются с этими Уартами аля RS485
но пока ничего существенного так и не нашли - есть конечно одна мысль - но надо ее проверить).
Реклама
Аватара пользователя
korsaj
Потрогал лапой паяльник
Сообщения: 330
Зарегистрирован: Чт июн 23, 2011 07:55:51

Re: LPC1768 + RS485

Сообщение korsaj »

Чё ето? rs485C0_RX/rs485C0_ТX? - переключение прием/передача..
Если да, оставте их включенными, приемник на прием, передатчик на передачу и помните что будете принимать эхосигнал.
Реклама
Ответить

Вернуться в «Периферия»