📄 com.h
字号:
/*---------------------------------------------------------------------*
FILENAME: SER977.H
Some definitions used by SERIAL.C
*--------------------------------------------------------------------*/
#define COM1 1
#define COM2 2
#define COM1BASE 0x3F8 //COM1的端口地址
#define COM2BASE 0x2F8 //COM2的端口地址
/*
The 8250 UART has 10 registers accessible through 7 port addresses.
Here are their addresses relative to COM1BASE and COM2BASE. Note
that the baud rate registers, (DLL) and (DLH) are active only when
the Divisor-Latch Access-Bit (DLAB) is on. The (DLAB) is bit 7 of
the (LCR).
o TXR 输出数据到串口。
o RXR 从串口读入数据。
o IER 控制中断产生。
o IIR 中断标志
o LCR 初始化串口。
o MCR 发送控制信号到modem.
o LSR 监视串口状态.
o MSR 从modem接收状态.
o DLL Low byte of baud rate divisor.
o DHH High byte of baud rate divisor.
*/
#define TXR 0 //发送保持寄存器(写方式时)
#define RXR 0 //接收保持寄存器(读方式时)
#define IER 1 //中断允许寄存器
#define IIR 2 //中断状态寄存器
#define LCR 3 //线路控制寄存器
#define MCR 4 //Modem控制寄存器
#define LSR 5 //线路状态寄存器
#define MSR 6 //Modem状态寄存器
//要设置BRD,必须首先将LCR的第7位设置成1。然后可以安全地将所需除数输
//出给它们的I/O地址。设置BRD后,应马上清除LCR的第7位。
#define DLL 0 //除数锁存器低位
#define DLH 1 //除数锁存器高位
/*-------------------------------------------------------------------*
LCR(线路控制寄存器)寄存器位定义。
引脚 含义
0-1 00=5 bits, 01=6 bits, 10=7 bits, 11=8 bits.(数据位为几位)
2 0=1 bits,1=2bits.(停止位)
3 0=parity off, 1=parity on.(校验开关)
4 0=parity odd, 1=parity even.(奇偶校验)
5 Sticky parity.
6 Set break.(中断允许)
7 Toggle port addresses.(端口触发器,用来触发除数寄存器)
*-------------------------------------------------------------------*/
#define NO_PARITY 0x00 //没有校验
#define ODD_PARITY 0x08 //奇校验
#define EVEN_PARITY 0x18 //偶校验
/*-------------------------------------------------------------------*
LSR(线路状态寄存器)寄存器位定义。
引脚 含义
0 Data ready.(接收到数据)
1 Overrun error.(数据寄存器溢出)
2 Parity error。(奇偶性出错)
3 Framing error.(帧差错,没有找到停止位)
4 Break detect - End to transmission requested.
5 Transmitter holding register is empty.(发送保持寄存器空)
6 Transmitter shift register is empty.(发送移位寄存器空)
7 Time out.(超时)
*-------------------------------------------------------------------*/
#define RCVRDY 0x01
#define OVRERR 0x02
#define PRTYERR 0x04
#define FRMERR 0x08
#define BRKERR 0x10
#define XMTRDY 0x20
#define XMTRSR 0x40
#define TIMEOUT 0x80
/*-------------------------------------------------------------------*
MCR(Modem控制寄存器)寄存器位定义.
引脚 含义
0 Data Terminal Ready. Computer ready to go(设置DTR线活动).
1 Request To Send. Computer wants to send data( 设置RTS线活动).
2 auxillary output #1.
3 auxillary output #2.
(Note: This bit must be set to allow the communications
card to send interrupts to the system)
4 UART ouput looped back as input.
5-7 not used.
*------------------------------------------------------------------*/
// 数据终端就绪(DTR)线告诉调制解调器,计算机已打开并准备接收来自调制解调器的信息。
#define DTR 0x01
//请求送出(RTS)线告诉解调器计算机准备向线上送出一些东西。
#define RTS 0x02
#define MC_INT 0x08
/*------------------------------------------------------------------*
MSR(Modem状态寄存器)寄存器位定义.
引脚 含义
0 delta Clear To Send(清除发送).
1 delta Data Set Ready(数据设置就绪).
2 delta Ring Indicator(环形指示器).
3 delta Data Carrier Detect(数据携带者探测).
4 Clear To Send(CTS设置为高电平).
5 Data Set Ready(DSR设置为高电平).
6 Ring Indicator(RI设置为高电平).
7 Data Carrier Detect(DCD设置为高电平).
*------------------------------------------------------------------*/
#define CTS 0x10
#define DSR 0x20
/*------------------------------------------------------------------*
IER(中断允许寄存器)寄存器位定义.
引脚 含义
0 Interrupt when data received(数据接收).
1 Interrupt when transmitter holding reg. empty(数据发送空).
2 Interrupt when data reception error(数据出错或中断).
3 Interrupt when change in modem status register(改变MODEN状态寄存器).
4-7 Not used.
*------------------------------------------------------------------*/
#define RX_INT 0x01
/*------------------------------------------------------------------*
IIR(中断状态寄存器)寄存器位定义.
引脚 含义
0 Interrupt pending(以发生的中断超过1).
1-2 Interrupt ID code(中断ID号).
00=Change in modem status register,
01=Transmitter holding register empty,
10=Data received,
11=reception error, or break encountered.
3-7 Not used.
*------------------------------------------------------------------*/
#define HSR_ID 0x0 //CTS,DSR,RI或DCD
#define NO_INT 0x01 //没有串口中断
#define TBRE_ID 0x02 //发送缓冲寄存器空中断
#define RX_ID 0x04 //接收数据中断
#define URS_ID 0x06 //串口错误或间断中断(过速,奇偶,组帧)
#define FDT_ID 0x0c
#define RX_MASK 0x0f //串口中断掩码
//8259的中断控制地址。
#define IMR 0x21 //中断掩码寄存器
#define ICR 0x20 //中断控制寄存器
//发送中断应答信号
#define EOI 0x20
/*
The (IMR) tells the (PIC) to service an interrupt only if it
is not masked (FALSE).
*/
#define IRQ3 0xF7 /* COM2 */
#define IRQ4 0xEF /* COM1 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -