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

📄 nxuart.c

📁 class to work with UART port on ATmega128/ATmega2560
💻 C
字号:
#include "nxUART.h"

#ifdef NXUART_USE_V20090211

unsigned char * pUART0RecBuf;
unsigned int UART0RecCount;
unsigned int UART0RecIndex;
bool * pUART0DataReady;

//extern bool isReceive, isCreated, isRecStarted;
//extern unsigned int temp_baud;

#ifdef __ATmega128__
#pragma vector = USART0_RXC_vect
__interrupt void USART0RXC_ISR(void)
{
		unsigned char udr0 = UDR0;
            //isReceive = true;
		*(pUART0RecBuf + (UART0RecIndex++)) = udr0;
		if (UART0RecIndex >= UART0RecCount)
		{
			UCSR0B &= ~((1<<RXCIE0) | (1<<RXEN0));	
			*pUART0DataReady = true;
		}
}
#endif


nxUARTPort::nxUARTPort(unsigned char UARTNum, unsigned int UARTSpeed)
{
unsigned long int tmp_baud = int(float(CPU_FREQ) / float(16.0 * UARTSpeed)) - 1;
      //temp_baud = tmp_baud;
      DataReady = false;
#ifdef __ATmega128__
	switch (UARTNum)
	{
		case 0:
		{
			UBRR0H = (tmp_baud >> 8) & 0xFF;
			UBRR0L = tmp_baud & 0xFF;
			UCSR0C = (1<<UCSZ01) | (1<<UCSZ00);
                  PortNum = 0;
                  //isCreated = true;
			break;
	  }
	}
#endif
}

void nxUARTPort::Init()
{
	
}

void nxUARTPort::TransmitData(unsigned char * pBuf, unsigned int Count)
{
#ifdef __ATmega128__
	switch (PortNum)
	{
		case 0:
		{
			UCSR0B |= (1<<TXEN0);
			for (unsigned char i = 0; i < Count; ++i)
			{
				while(!(UCSR0A & (1 << UDRE0))) //铈桎噱

⌨️ 快捷键说明

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