📄 uart.c
字号:
#ifndef __UART_C__
#define __UART_C__
#include "NGVDP_VDP.h"
/*
uint8 Add_byte_to_receive_buf(uint8 Uart_num, uint8 * receive_buf, uint8 data)
{
switch (Uart_num)
{
case Uart0:
{
if (Uart0_receive_pointer < MAX_UART0_RECEIVE_BUF)
{
receive_buf[Uart0_receive_pointer] = data;
Uart0_receive_pointer ++;
}
}
break;
case Uart1:
{
if (Uart1_receive_pointer < MAX_UART1_RECEIVE_BUF)
{
receive_buf[Uart1_receive_pointer] = data;
Uart1_receive_pointer ++;
}
}
break;
}
return 0;
}
*/
uint8 Uart_enable_send(uint8 Uart_num)
{
switch (Uart_num)
{
case Uart0:
{
UartTxCtrl (Uart0, ON);
Uart0_send_pointer = 0;
UDR0 = Uart0_send_buf[Uart0_send_pointer];
Uart0_state = Uart_State_sending;
}
break;
case Uart1:
{
UartTxCtrl (Uart1, ON);
Uart1_send_pointer = 0;
UDR1 = Uart1_send_buf[Uart1_send_pointer];
Uart1_state = Uart_State_sending;
//UDR0 = 0xff;
}
}
return 0;
}
void UartTxCtrl(uint8 port, uint8 opt)
{
switch (port)
{
case Uart0:
(opt) ? (PORTD = PIND | (1 << PORT_485EN0)) : (PORTD = PIND & (~(1 << PORT_485EN0)));
break;
case Uart1:
(opt) ? (PORTD = PIND | (1 << PORT_485EN1)) : (PORTD = PIND & (~(1 << PORT_485EN1)));
break;
default:
break;
}
}
/*
void UartPutChar (uint8 port, uint8 ch)
{
switch (port)
{
case Uart0:
UartTxCtrl (port, ON);
while (!(UCSR0A& 0x20));
UDR0 = ch;
break;
case Uart1:
UartTxCtrl (port, ON);
while (!(UCSR1A& 0x20));
UDR1 = ch;
break;
default:
break;
}
}
*/
void UartPuts (uint8 port, uint8 *buffer, uint8 len)
{
unsigned char i;
// for (i=0;i<len;i++)
switch (port)
{
case Uart0:
UartTxCtrl (port, ON);
for (i = 0;i < len;i++)
{
while (!(UCSR0A& 0x20));
UDR0 = *(buffer + i);
}
break;
case Uart1:
UartTxCtrl (port, ON);
for (i = 0;i < len;i++)
{
while (!(UCSR1A& 0x20));
UDR1 = *(buffer + i);
}
break;
default:
break;
}
}
void UartInit (uint8 port)
{
switch (port)
{
case Uart0:
// QClear (QUEUE_UART0);
UartTxCtrl (port, OFF);
UCSR0B = 0x00;
UCSR0A = 0x00;
/*
baud = ((OSC/16)/BAUD)-1;
UBRR0H =(baud / 0x100) & 0x0f;
UBRR0L = baud & 0xff;
*/
// UCSR0A = (1<<U2X0);
UBRR0H = 0x00;
UBRR0L = 0xcf;
// UCSR0B = (1<<RXCIE0)|(1<<RXEN0)|(0<<TXCIE0)|(1<<TXEN0);
UCSR0B = (1 << RXCIE0) | (1 << RXEN0) | (1 << TXEN0) | (0 << TXCIE0);
// UCSR0C = (3<<UCSZ00) |(1 << UPM01) |(1 << UPM00);
UCSR0C = (3 << UCSZ00);
break;
case Uart1:
// QClear (QUEUE_UART0);
UartTxCtrl (port, OFF);
UCSR1B = 0x00;
UCSR1A = 0x00;
/* baud = ((OSC/16)/BAUD)-1;
UBRR1H =(baud / 0x100) & 0x0f;
UBRR1L = baud & 0xff;*/
UBRR1H = 0;
UBRR1L = 0xcf;
UCSR1B = (1 << RXCIE1) | (1 << RXEN1) | (0 << TXCIE1) | (1 << TXEN1);
UCSR1C = (3 << UCSZ10) ;//|(1 << UPM11) |(1 << UPM10);
break;
default:
break;
}
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -