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

📄 serial.c

📁 嵌入式系统基础课件
💻 C
字号:
#include "libepc.h"
#include "os_cpu.h"
#include "os_cfg.h"
#include "ucos_ii.h"
#include "serial.h"
#include <dos.h>
#include <pc.h>

void SerialISR(void) ;

OS_EVENT *com1_queue = NULL ;

BYTE8 SerialGet(void)
	{
	char err ;
	return ((unsigned) OSQPend(com1_queue, 0, &err)) & 0xFF ;
	}

void SerialPut(char ch)
	{
	/* This function uses programmed waiting loop I/O	*/
	/* to output the ASCII character 'ch' to the UART.	*/

	while ((inportb(SER_LSR) & SER_LSR_THRE) == 0)
		{
		OSTimeDly(1) ;
		}

	outportb(SER_THR, ch) ;
	}

void SerialInit(void)
	{
	static void *com1_q[20] ;

	if (com1_queue) return ;

	com1_queue = OSQCreate(com1_q, ENTRIES(com1_q)) ;

	disable() ;

	outportb(SER_IER, 0x00) ;

	/* Setup for 38400 baud */
	outportb(SER_LCR, SER_LCR_DLAB) ;
	outportb(SER_DLO, 3) ;
	outportb(SER_DHI, 0) ;

	/* 8 data bits, no parity, 1 stop bit */
	outportb(SER_LCR, 0x03) ;

	/* Set FIFO to trigger at 14 */
	outportb(SER_FCR, 0xC7) ;

	/* Request to send, data terminal ready, enable interrupts */
	outportb(SER_MCR, SER_MCR_RTS|SER_MCR_DTR|SER_MCR_OUT2) ;

	/* Enable only receiver data ready interrupts */
	outportb(SER_IER, 0x01) ;

	SetISR(IRQ2INT(IRQ_COM1_COM3), SerialISR) ;
	outportb(0x21, inportb(0x21) & ~SER_MSK) ;

	enable() ;
	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -