如何让com口工作在中断模式:
1, 在8259中把com口对应的中断打开
2, MCR BIT3(OUT2)设1(X86架构)
3, IER 把需要的中断置起来,
如何让com口工作在FIFO模式:
1。设置FCR BIT0让COM知道下面是设置FIFO模式的命令。
2。设置FCR BIT7-BIT6 来决定缓冲大小
0 0 1byte
0 1 4byte
1 0 8byte
1 1 14byte
3. 设置FCR BIT3来 启动FIFO模式
下面这段代码就是初始化COM口,并工作在FIFO模式。
Sample Code
; Set IRQ enable and out2 to set enable interrupts
mov cl, COM_IRQ ;
mov dx, 21h
cmp cl,7 ; judge IRQ > 7
jbe short wlsp_00
mov dx, 0a1h
sub cl, 8
wlsp_00:
in al, dx ; Program Interrupt Controller to
mov ah, 01
shl ah, cl
xor ah, 0FFh
and al, ah
out dx, al
mov cl, COM_IRQ ;
cmp cl, 7
jbe wlsp_01
in al, 21h
and al, 0FBh
out 21h, al
wlsp_01:
mov bh, MCR ; Modem Control Register
call Read_COM_Reg ; Read the reg to
mov bh, MCR
mov bl, 008h ; set out2 to set enable interrupts
call Prog_COM_Reg ; Program the reg
; Set Enable Buad_Rate
mov bx, 0383h ; Prog 3FB reg to
; Data Bits =8, Access baud rate generator
call Prog_COM_Reg
; Program the baud rate divisor
mov bh, 00h ; Prog 3FB reg to set
mov bl, DIVISER ; Baud rate divisor LSB
call Prog_COM_Reg
mov bx, 0100h ; Prog 3F9h reg to set
; Baud rate divisor MSB
call Prog_COM_Reg
; Reset DLAB, program 8 bits, 1 stop bit, no parity checking
mov bx, 0303h ; 3FB, 8 Bits per char
call Prog_COM_Reg
; Program COM port Interrupt Enable Register
mov bx, 0100h ; Prog 3F9 Reg to
; disable THRE, line status,
; modem-status-change, data available int
call Prog_COM_Reg
; FIFO Control Register
mov bx, 0201h ; Prog 3FA reg to
; enable FIFOs
call Prog_COM_Reg
mov bx, 02C7h ; Prog 3FA reg to
; 14-byte level trigger, TX FIFO reset,
; RX FIFO reset, enable FIFO
; Clear FIFOs, 14-byte level
call Prog_COM_Reg
; Interrupt Ident Register
mov bh, 02h ; 3FAh reg
call Read_COM_Reg
; Modem Conltrol Register
mov bx, 040Bh ; Prog 3FC reg to
; Activate DTR, RTS, OUT2
call Prog_COM_Reg
; Interrupt Enable Register
mov bx, 010Fh ; Prog 3F9 reg to
; enable THRE, line status,
; modem-status-change, data available int
call Prog_COM_Reg
; Line Status Register - LSR
; reset the LSR
; reset IIR
mov bh, 05h ; 3FDh reg
call Read_COM_Reg
; Modem Status Register - MSR
; reset MSR
; reset IIR
mov bh, 06h ; 3FEh reg
call Read_COM_Reg
系列文章连接