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

📄 uart.c

📁 代码有点长,需细心阅读,仅供影音视听类产品的开发人员参考
💻 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 + -