Esempio n. 1
0
__interrupt void USCI_A3_ISR(void)
{
  switch(__even_in_range(UCA3IV,4))
  {
  case 0:break;                             // Vector 0 - no interrupt
  case 2:break;                             // Vector 2 - RXIFG
  case 4:                                   // Vector 4 - TXIFG
    
    if ( TxCount == 0 )
    {
      UCA3IFG = 0;
      TxBusy = 0;
      
      /* start the countdown to disable SMCLK */
      DisableSmClkCounter = 0;  
      EnableRtcPrescaleInterruptUser(RTC_TIMER_USER_DEBUG_UART);
     
    }
    else
    {
      /* send a character */
      UCA3TXBUF = TxBuffer[ReadIndex];
      IncrementReadIndex();
      TxCount--;  
    }
    break;
    
  default: break;
  }
  
}
Esempio n. 2
0
static void WriteTxBuffer(tString * const pBuf)
{
  unsigned char i = 0;
  unsigned int LocalCount = TxCount;
 
  /* if there isn't enough room in the buffer then characters are lost */
  while ( pBuf[i] != 0 && LocalCount < TX_BUFFER_SIZE )
  { 
    TxBuffer[WriteIndex] = pBuf[i++];
    IncrementWriteIndex();
    LocalCount++;
  }    

  /* keep a sticky bit for lost characters */
  if ( pBuf[i] != 0 )
  {
    gAppStats.DebugUartOverflow = 1;
  }
  
  /* 
   * update the count (which can be decremented in the ISR 
   * and start sending characters if the UART is currently idle 
  */
  if ( i > 0 )
  {
    portENTER_CRITICAL();
    
    TxCount += i;
    
#if 0
    if ( TxCount > TX_BUFFER_SIZE )
    {
      while(1);  
    }
#endif
    
    if ( TxBusy == 0 )
    {
      EnableSmClkUser(BT_DEBUG_UART_USER);
      UCA3TXBUF = TxBuffer[ReadIndex];
      IncrementReadIndex();
      TxBusy = 1;
      TxCount--;  
    }
    
    portEXIT_CRITICAL();
  }
}
Esempio n. 3
0
/*****************************************************************************
  Function:
    void EventDequeue(t_event *p_event);

  Summary:
    Removes an event from the event queue.

  Description:
    Called by Universal Driver when it is going to report an event to the
    application via a callback function.

 Parameters:
    p_event -- pointer to where event data is written

  Returns:
    Pointer to event object

  Remarks:
    None
*****************************************************************************/
void EventDequeue(t_event *p_event)
{
    t_event *p_eventInQueue;

    // event queue should never be empty
    if (isEventQEmpty())
    {
        // ToDo: callback here?
        for(;;);
    }

    // point to next event in event queue
    p_eventInQueue = &g_eventQueue.event[g_eventQueue.readIndex];

    // copy event info into callers structure
    p_event->eventType = p_eventInQueue->eventType;
    p_event->eventData = p_eventInQueue->eventData;

    IncrementReadIndex();
}