📄 uart.c
字号:
#include "config.h"
#include "regmap.h"
#include "uart.h"
extern BYTE *uart_buf;
#ifdef SUPPORT_EPP_DBG
void UART_init(BYTE selection)
{
uart_wp = uart_rp = 0;
UART_LSR = UART_SOFTRESET; // soft reset
// disable interrupt
UART_ISC = 0; //1<<5;
// UART_DIV_L = sysclk/(16*baud_rate)-0.5
switch (selection)
{
case CLK337:
UART_DIV_L = 18;
break;
case CLK405:
UART_DIV_L = 21;
break;
case CLK54:
UART_DIV_L = 28;
break;
case CLK675:
UART_DIV_L = 36;
break;
case CLK81:
UART_DIV_L = 43;
break;
default:
UART_DIV_L = 14;
break;
}
UART_DIV_H = 0;
UART_LCR =
UART_8bits | UART_ONESTOPBIT | UART_DISABLEPARITY | UART_VOTESEL0;
//UART_MCR = UART_AUTO_RTS | UART_AUTO_CTS;
}
#endif
#if 0
// blocking function
void UARTSend(UINT8 * a, UINT8 n)
{
while(n > 0)
{
while(IsUARTCmdTxFull())
;
UART_DATA = *a++;
n--;
}
}
void UARTReceive(UINT8 * a, UINT8 n)
{
while(n > 0)
{
while(IsUARTCmdRxEmpty())
;
*a++ = UART_DATA;
n--;
}
}
void reset_uart0_fifo()
{
uart_rp = uart_wp = 0;
UART_ISC = 0; // disable interrupt
}
int is_uart0_fifo_empty()
{
return (uart_wp == uart_rp);
}
int is_uart0_fifo_full()
{
int wp = uart_wp;
int rp = uart_rp;
int wpn;
wpn = wp + 1;
if(wpn >= FIFOS)
wpn = 0;
if(wp != rp)
UART_ISC = (1 << 4);
return (wpn == rp); // full-condition
}
void write_uart0(int c)
{
int wp = uart_wp;
int rp = uart_rp;
int wpn;
wpn = wp + 1;
if(wpn >= FIFOS)
wpn = 0;
if(wpn != rp)
{
uart_buf[wp] = c;
uart_wp = wpn;
}
UART_ISC = (1 << 4); // enable it.
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -