DOS DM&P 串口库参考手册

2003/05/27 Version 0.12

串口库

DOS SerPort库来源于我们开发的RSIP内核,支持4个串口和中断驱动通信;它是一个DOS 系统实模式下大型记忆体模型库,支持M6117D CPU的DM&P 产品。DOS SerPort库提供 简单的C函数,可以为开发人员节省大量的开发时间。

SerPort库使用前,必须知道I/O基地址和COM端口中断。COM1/2端口的缺省中断是IRQ4/3; 如果SBC有4个COM端口,COM3/4端口和COM1/2端口有相同的缺省中断。缺省的I/O 基地址和SBC中断如下表:

COM1 3F8H IRQ4
COM2 2F8H IRQ3
COM3 3E8H IRQ4
COM4 2E8H IRQ3

串口不支持中断共享,所以当4个COM端口使用时,推荐将COM3/4端口中断设置为 IRQ10/11;例如,6026的跳线JP7将COM33/4端口中断设置为IRQ10/11。串口端口支持的 中断设置如下表:

COM1 COM2 COM3 COM4 Status
IRQ4 IRQ3 OK
IRQ4 IRQ3 OK
IRQ4 IRQ3 IRQ10 IRQ11 OK
IRQ4 IRQ3 IRQ4 IRQ3 Not Supported

SerPort库中有一个演示程序“demo.c”,它用COM1端口发送键盘消息,用COM2接收该 消息。测试前,准备一根交叉电缆(管脚2和管脚3换接),用该电缆连接SBC上的COM1 和COM2端口,运行文件“demo.exe”,敲击键盘向COM1端口发送消息,COM2端口将会 接收到该消息。或者这样,连接SBC(1)的COM1端口和SBC(2)的COM2端口,运行文件 “demo.exe”,SBC(1)上的键盘消息将会发送到SBC(2)。

函数参考


int SerPort_Open(enum COM_t ComPort,unsigned int nBufSize,unsigned int nBaseAddr,unsigned int nIrq);

说明: 初始化COM端口,设置缓冲区大小
参数:
返回参数; 0:失败;其它:成功
ComPort 预定义值:COM1/COM2/COM3/COM4.
nBufSize 端口缓冲区大小
nBaseAddr I/O基地址,缺省值参考下表:
nIrq the IRQ you want to use.

COM1 3F8H IRQ4
COM2 2F8H IRQ3
COM3 3E8H IRQ4
COM4 2E8H IRQ3

举例:
SerPort_Open(COM1,4096,0x3f8,4);

int SerPort_Close(enum COM_t ComPort);

说明: 关闭一个COM端口
参数:
返回参数; 0:失败;其它:成功
ComPort 预定义值:COM1/COM2/COM3/COM4.
举例:
SerPort_Close(COM1);

int SerPort_IsOk(enum COM_t ComPort);

说明: 检测COM端口是否正常初始化
参数:
返回参数; 0:失败;其它:成功
ComPort 预定义值: COM1/COM2/COM3/COM4.
举例:
if(SerPort_IsOk(COM1)==0) printf("Unable to initialize COM1.\n");

void SerPort_SetParam(enum COM_t ComPort,enum Baud_t Baud,enum Parity_t Parity,enum Length_t Length,enum StopBit_t StopBit);

说明: 设置COM端口参数
参数:
返回参数; N/A
ComPort 预定义值: COM1/COM2/COM3/COM4.
Baud 预定义值: BAUD_50, BAUD_75, BAUD_110, BAUD_300, BAUD_1200, BAUD_2400, BAUD_4800, BAUD_9600, BAUD_14400, BAUD_19200, BAUD_38400, BAUD_57600, BAUD_115200.
Parity 预定义值: PARITY_NO, PARITY_ODD, PARITY_EVEN, PARITY_MARK, PARITY_Space.
Length 预定义值: LENGTH_5_BIT, LENGTH_6_BIT, LENGTH_7_BIT, LENGTH_8_BIT.
StopBit 预定义值: STOPBIT_1_BIT, STOPBIT_2_BIT.
举例:
/* Set baud rate 115200 bps, no parity, 8 bits, 1 stop bit */SerPort_SetParam(COM1,BAUD_115200,PARITY_NO,LENGTH_8_BIT,STOPBIT_1_BIT);

void SerPort_Clear(enum COM_t ComPort);

说明: 缓冲区数据清零
参数:
返回参数; N/A
ComPort 预定义值: COM1/COM2/COM3/COM4.
举例:
SerPort_Clear(COM1);

int SerPort_IsParityError(enum COM_t ComPort);

说明: 检测奇偶校验是否出错
参数:
返回参数; N/A
ComPort 预定义值: COM1/COM2/COM3/COM4.
举例:
if(SerPort_IsParityError(COM1)!=0) printf("Parity error.\n");

unsigned int SerPort_Avail(enum COM_t ComPort);

说明: 获取缓冲区有效数据大小
参数:
返回参数; 0:失败;其它:成功
ComPort 预定义值: COM1/COM2/COM3/COM4.
举例:
if(SerPort_Avail(COM1)) SerPort_RecvBuf(COM1,pcBuf,1024);

int SerPort_SendBuf(enum COM_t ComPort,const char *pcBuf,unsigned int nSize);

说明: 向COM端口发送缓冲区数据
参数:
返回参数; 0:失败;其它:成功
ComPort 预定义值: COM1/COM2/COM3/COM4.
pcBuf 缓冲区指针
nSize 缓冲区大小
举例:
SerPort_SendBuf(COM1,pcBuf,1024);

int SerPort_SendStr(enum COM_t ComPort,const char *szStr);

说明: 向COM端口发送ASCIIZ字符串数据
参数:
返回参数; 0:失败;其它:成功
ComPort 预定义值: COM1/COM2/COM3/COM4.
szStr ASCIIZ指针
举例:
char *szAtCmd = "ATZ";SerPort_SendStr(COM1,szAtCmd);

int SerPort_SendByte(enum COM_t ComPort,char c);

说明: 向COM端口发送1 byte数据
参数:
返回参数; 0:失败;其它:成功
ComPort 预定义值: COM1/COM2/COM3/COM4.
c 发送的1 Byte数据
举例:
char c = 'x';SerPort_SendByte(COM1,c);

int SerPort_RecvBuf(enum COM_t ComPort,char *pcBuf,unsigned int nSize);

说明: 从COM端口接收数据
参数:
返回参数; 0:失败;其它:成功
ComPort 预定义值: COM1/COM2/COM3/COM4.
pcBuf 缓冲区指针
nSize 缓冲区大小
举例:
char szBuf[1024];SerPort(COM1,szBuf,1024);

int SerPort_RecvByte(enum COM_t ComPort,char *pc);

说明: 从COM端口接收1byte数据
参数:
返回参数; 0:失败;其它:成功
ComPort 预定义值: COM1/COM2/COM3/COM4.
pc 接收的1byte数据缓冲区
举例:
char c;SerPort_RecvByte(COM1,&c);

int SerPort_GetDTR(enum COM_t ComPort);

说明: 获取数据终端准备状态
参数:
返回参数; 0 is unset, 1 is set.
ComPort 预定义值: COM1/COM2/COM3/COM4.
举例:
if(SerPort_GetDTR(COM1)){/* do something */}

void SerPort_SetDTR(enum COM_t ComPort,int n);

说明: 设置数据终端准备状态
参数:
返回参数; N/A
ComPort 预定义值: COM1/COM2/COM3/COM4.
n 设置DTR的值
举例:
SerPort_SetDTR(COM1,1);

int SerPort_GetRTS(enum COM_t ComPort);

说明: 获取发送状态的请求
参数:
返回参数; 0 is unset, 1 is set.
ComPort 预定义值: COM1/COM2/COM3/COM4.
举例:
if(SerPort_GetRTS(COM1)){/* do something */}

void SerPort_SetRTS(enum COM_t ComPort,int n);

说明: 设置发送状态的请求
参数:
返回参数; N/A
ComPort 预定义值: COM1/COM2/COM3/COM4.
n 设置RTS状态的值
举例:
SerPort_SetRTS(COM1,1);

Jan Yin Chan Electronics Co., LTD. 保留所有权利。 邮件地址:info@dmp.com.cn