📄 uartctrl.c
字号:
#include "stdinc.h"
#include "fpgainc.h"
#include "uartctrl.h"
void uartInit (void)
{
X_UCSRB = 0;
X_UBRRL = 0x03;
X_UBRRH = 0x00;
X_UCSRC = (1<<UCSZ01) | (1<<UCSZ00);
// X_UCSRC |= (1<<UPM01);
X_UCSRB = (1<<RXEN0) | (1<<TXEN0);
X_UCSRB |= (1<<RXCIE0);
X_UCSRB |= (1<<TXCIE0);
}
void uartPrint (char *pStr)
{
char c;
X_UCSRA |= (1<<TXC0);
while ( (c=*pStr++) != 0 ) {
X_UDR = c;
while ( (X_UCSRA & (1<<TXC0)) == 0);
X_UCSRA |= (1<<TXC0);
}
}
void uartSendChar (char c)
{
while ( (X_UCSRA & (1<<UDRE0)) == 0);
X_UCSRA |= (1<<TXC0);
X_UDR = c;
}
unsigned char __GucUSCRA;
char uartGetChar (void)
{
char c;
while ( (X_UCSRA & (1<<RXC0)) == 0 );
__GucUSCRA = X_UCSRA;
if (__GucUSCRA & 0x1C) {
__GucUSCRA = 0;
}
c = X_UDR;
return c;
}
unsigned char __GucTxDatBuf = 0;
BOOL __GbTxBufFull = FALSE;
void uartSendCharNoblock (char c, BOOL bNewDat)
{
if (bNewDat) {
if (__GbTxBufFull) {
__GucTxDatBuf = c;
__GbTxBufFull = TRUE;
} else {
X_UDR = c;
}
} else {
if (__GbTxBufFull) {
X_UDR = __GucTxDatBuf;
__GbTxBufFull = FALSE;
}
}
}
#pragma vector=INT4_vect
__interrupt void int4_isr(void)
{
unsigned char ucUCSRB;
char c;
ucUCSRB = X_UCSRB;
if (ucUCSRB & (1 << RXCIE0)) {
if (X_UCSRA & (1 << RXC0)) {
c = X_UDR;
uartSendCharNoblock(c, 1);
}
}
if (ucUCSRB & (1 << TXCIE0)) {
if (X_UCSRA & (1 << TXC0)) {
uartSendCharNoblock (0, 0);
X_UCSRA |= (1<<TXC0);
}
}
if (ucUCSRB & (1 << UDRIE0)) {
if (X_UCSRA & (1 << UDRE0)) {
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -