📄 uart3._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 + -