⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart.c

📁 Wind sensor for control speed air flow.
💻 C
字号:
/************************************************
   uart.c - Routines for a buffered UART.
*************************************************/
#include <iom8.h>
#include "uart.h"
#include "buffer.h"

#define UART_BAUD_RATE			115200
#define UART_UBRR			3//((F_CPU / 16 / UART_BAUD_RATE)-1)

bsCircBuffer g_receiveBuffer;
bsCircBuffer g_transmitBuffer;

// serInit() - Initialises the serial port routines
void serInit(void)
{ buInitBuffer(&g_receiveBuffer);
  buInitBuffer(&g_transmitBuffer);
  UCSRB = 0xD8;
  UBRRL = UART_UBRR;
}
// ISR : RX - When a byte is received, throw it into the receive buffer.
#pragma vector = USART_RXC_vect
__interrupt void USART_RX_Complete(void)
{ unsigned char nByte;  
  nByte = UDR;
  buWriteByte(&g_receiveBuffer, nByte);
}
// ISR : TX - When the data buffer is empty, transmit a byte if possible, otherwise disable
// this interrupt.
#pragma vector = USART_UDRE_vect
__interrupt void USART_UDR_Empty(void)
{ if(!buIsBufferEmpty(&g_transmitBuffer))
  { unsigned char nData;    
    nData = buReadByte(&g_transmitBuffer);
    UDR = nData;
  }
  else UCSRB_Bit5 = 0;
}
// serHasBytesBeenReceived() - Returns whether or not bytes have been received.
// Returns:
//   0 - Input buffer empty
// else - Bytes are available
unsigned char serHasBytesBeenReceived(void)
{ return (buIsBufferEmpty(&g_receiveBuffer) ? 0 : 1);
}
// serReadByte() - Returns a received byte from the buffer.  Ensure that there
// is data in the buffer first by reading serGetBytesReceived() first.
// Returns:
//   A byte from the receive buffer
unsigned char serReadByte(void)
{ return buReadByte(&g_receiveBuffer);
}
// serWriteByte() - Puts a byte into the transmit buffer, and enable the transmit
// interrupt.
// Returns:
//   The number of bytes written into the buffer.
unsigned char serWriteByte(unsigned char nData)
{ unsigned char nBytesInBuffer;
  if(buWriteByte(&g_transmitBuffer, nData) != 0) nBytesInBuffer = 0;
  else
  { nBytesInBuffer = 1;
    UCSRB_Bit5 = 1;
  }
  return nBytesInBuffer;
}

// serGetTransmitBufferFull() - Indicates if the output buffer is full or not
// Returns:
//   0 - Transmit buffer is not full
//   1 - Transmit buffer is full
unsigned char serGetTransmitBufferFull(void)
{ return buIsBufferFull(&g_transmitBuffer);
}
// serWriteFromSRAM() - Writes a string to the serial port from SRAM.
//   pString - A pointer to SRAM
//   nLength - The number of characters in the string
// Returns:
//   The number of bytes written to the transmit buffer
unsigned char serWriteFromSRAM(const unsigned char *pString, unsigned char nLength)
{ unsigned char nBytesInBuffer;
  nBytesInBuffer = 0;
  for( ; nLength > 0; nLength--)
  { if(buWriteByte(&g_transmitBuffer, *pString) != 0) break;
    nBytesInBuffer++;
    pString++;
  }
  UCSRB_Bit5 = 1;
  return nBytesInBuffer;
}
// serGetTransmitBufferEmpty() - Returns whether or not the transmit buffer
// is emtpy.
// Returns:
//    0 - Transmit buffer not empty
// else - Transmit buffer empty
unsigned char serGetTransmitBufferEmpty(void)
{ return buIsBufferEmpty(&g_transmitBuffer);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -