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

📄 uart3._c

📁 u-blox的GPS模块LEA-5x,三本例子为ATMEGA1280对他的操作的程序
💻 _C
字号:
#include <iom1280v.h>
#include <macros.h>
#include "define.h"
#include "gps.h"

uart uart3;

uchar uart3_recv_buf[1000];

//-------------------------------------------------------------
void uart3_register_init(void)
{ 	
	//U2X3=1
	UCSR3A=(1<<U2X3);   
	//异步模式,数据格式:8位数据位,1位停止位,无奇偶校验
	UCSR3C=( (1<<UCSZ31) | (1<<UCSZ30) );		
	//Focs=14.7456MHZ  baudrate=9600
	UBRR3H=0x00;	
	UBRR3L=191;
	//发送和接收使能
	UCSR3B |=(1<<RXEN3);
	UCSR3B |=(1<<TXEN3);
	//接收中断使能
	UCSR3B |=(1<<RXCIE3);
}
//-------------------------------------------------------------
void uart3_init(void)
{
	uart3_register_init();
	
	uart3.state			= UART_STATE_NULL;
	uart3.time			= UART_TIME;
	uart3.last_recv_len	= 0;
	uart3.recv_len		= 0;
	uart3.send_len		= 0;
}
//-------------------------------------------------------------
#pragma interrupt_handler uart3_rx_isr:iv_USART3_RXC
void uart3_rx_isr(void)
{	
	uart3_recv_buf[uart3.recv_len]=UDR3;
	(uart3.recv_len)++;
}
//-------------------------------------------------------------
bool uart0_check_rev_data(void)
{
	if((uart3.last_recv_len) != (uart3.recv_len)){
		(uart3.last_recv_len) = (uart3.recv_len);
		return true;
	}
	return false;
}
//-------------------------------------------------------------
unsigned char uart3_function(void)
{
	switch(uart3.state)
	{
		case UART_STATE_NULL:
			uart3.state			= UART_STATE_CHECK_RECV;
			uart3.time			= UART_TIME;
			uart3.last_recv_len	= 0;
			uart3.recv_len		= 0;
			uart3.send_len		= 0;
		break;

		case UART_STATE_CHECK_RECV:
			if(uart0_check_rev_data()==TRUE){
				uart3.state = UART_STATE_RECVING_DATA;
				uart3.time = UART_TIME;
	        }else{
			}
		break;

		case UART_STATE_RECVING_DATA:
			if(uart0_check_rev_data()){
				uart3.time = UART_TIME;
			}else{
				(uart3.time)--;
				if(!(uart3.time)){
					uart3.state = UART_STATE_DISPOSE_DATA;
				}
			}
		break;

		case UART_STATE_DISPOSE_DATA:
			uart3.last_recv_len	=0;
			uart3.state = UART_STATE_NULL;
			//add function here
			CLI();
			gps_function(uart3_recv_buf,uart3.recv_len);
			SEI();
			//set recv lengh zero
			uart3.recv_len	= 0;
			//uart3.state			= UART_STATE_CHECK_RECV;
		break;

		default:
			uart3.state = UART_STATE_NULL;
		break;
	}
	return 1;
}
//-------------------------------------------------------------
void uart3_data_send(unsigned char *pbuf,unsigned int sendLen)
{
	unsigned int i;
	for(i=0;i<sendLen;i++)
	{
		while(!(UCSR3A & (1<<UDRE3)));	// 等待发送缓冲寄存器空	
		UDR3=* (pbuf+i);	
	}
	return;
}
//-------------------------------------------------------------
void uart3_send_char(unsigned char c)
{
	while(!(UCSR3A & (1<<UDRE3)));	// 等待发送缓冲寄存器空	
	UDR3=c;
	return;
}

⌨️ 快捷键说明

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