CD: Carrier detect (0: thiết bị thông tin tìm thấy sóng mang đã liên lạc đ−ợc với phía bên kia) RxD: dữ liệu thu
1: đảo parity 0: không hoạt động
Hình 9.36. Dạng thức của thanh ghi khuôn dạng dữ liệu LCR.
Thanh ghi đệm giữ phát (transmitter holding register, THR)
Ký tự cần phát đi phải đ−ợc ghi từ CPU vμo thanh ghi nμy trong khi bit DLAB=0. Sau đó khi truyền 8250A lấy ký tự từ đây, đóng khung cho nó nh− đã định vμ đ−a từng bit ra chân Sout.
Thanh ghi đệm thu (receiver buffer register, RBR)
Khi 8250A nhận đ−ợc một ký tự qua chân Sin, nó tháo bỏ khung cho ký tự vμ giữ ký tự tại thanh ghi đệm thu để CPU đọc. CPU chỉ đọc đ−ợc ký tự trong thanh ghi nμy khi bit DLAB=0.
Thanh ghi cho phép tạo yêu cầu ngắt (interrupt enable register, IER)
Thanh ghi nμy dùng để cho phép/cấm các nguyên nhân gây ngắt khác nhau, trong khi mạch 8250A hoạt động, có thể tác động đ−ợc tới CPU thông qua chân
INTRPT của UART. Mỗi bit trong các bit D3, D2, D1, D0 ở mức cao sẽ cho phép các hiện t−ợng t−ơng ứng với bit đó đ−ợc đ−a ra yêu cầu ngắt đối với CPU.
Dạng thức của thanh ghi IER đ−ợc biểu diễn trên hình 9.37.
D7 D6 D5 D4 D3 D2 D1 D0
0 0 0 0 MODEM RLINE TxEMTY RxRDY
1: cho phép các thay đổi trạng 1: cho phép gây ngắt khi thái của modem gây ngắt đệm thu đầy 1: cho phép các tín hiệu trạng 1: cho phêp gây ngắt khi đệm giữ phát rỗng thái đ−ờng dây thu gây ngắt
Hình 9.37. Dạng thức của thanh ghi IER.
Thanh ghi nhận dạng nguồn yêu cầu ngắt (interrupt identification register, IIR)
Thanh ghi nhận dạng ngắt (chỉ để đọc ra) chứa mã mức −u tiên cao nhất của yêu cầu ngắt (tại chân INTRPT của 8250A) đang chờ đ−ợc phục vụ. Do vậy khi cần xử
lý các yêu cầu ngắt theo kiểu thăm dò, CPU chỉ cần đọc bit ID0 của thanh ghi nμy để biết lμ có yêu cầu ngắt vμ kiểm tra các bit ID2-ID1 để xác định đ−ợc nguồn gốc của yêu cầu ngắt.
Sau khi UART bị reset, chỉ có yêu cầu ngắt có mức −u tiên số 1 sẽ đ−ợc phục vụ. Ta có thể thay đổi điều nμy bằng cách dùng mặt nạ che đi các yêu cầu ngắt nμo đó (không cho nó tác động) bằng cách ghi vμo thanh ghi IER các bit thích hợp.
Dạng thức của thanh ghi IIR đ−ợc biểu diễn trên hình 9.38.
D7 D6 D5 D4 D3 D2 D1 D0
0 0 0 0 0 ID2 ID1 ID0
mã hoá yêu cầu ngắt có mức −u tiên cao nhất 0: có yêu cầu ngắt đang chờ đ−ợc phục vụ 1: không có
Các nguồn tạo ra yêu cầu ngắt đ−ợc liệt kê theo chủng loại vμ đ−ợc sắp xếp theo thứ tự −u tiên giảm dần trong Bảnh 9.4. Bảnh 9.4 còn cho thấy rằng các bit ID2ID1ID0 của thanh ghi IIR th−ờng bị xoá khi ta đọc các thanh ghi trạng thái hoặc các thanh ghi liên quan.
Bảnh 9.4. Mức −u tiên gán cho các nguồn gây ngắt trong 8250A.
ID2 ID1 mức Tên loại ngắt Nguồn gốc IDi bị xoá khi
1 1 1 trạng thái đ−ờng thu lỗi khung, thu đè, lỗi parity, gián đoạn khi thu
đọc LSR
1 0 2 đệm thu đầy đệm thu đầy đọc RBR
0 1 3 đệm giữ phát rỗng đệm giữ phát rỗng đọc IIR,ghi THR 0 0 4 trạng thái modem ΔCTS, ΔDSR, ΔRI, ΔRLSD đọc MSR
Thanh ghi điều khiển modem (modem control register, MCR)
Thanh ghi nμy còn đ−ợc gọi lμ thanh ghi điều khiển các tín hiệu ra của modem bởi vì nó cho phép ta điều khiển các tín hiệu tại các chân DTR vμ RTS của mạch UART.
Dạng thức của thanh ghi MCR đ−ợc biểu diễn trên hình 9.39.
Bằng bit D0=DTR=1 ta có thể điều khiển tín hiệu tại chân DTR của mạch 8250A đạt mức tích cực thấp để báo UART sẵn sμng lμm việc.
T−ơng tự, bằng bit D1=RTS=1 ta có thể điều khiển tín hiệu tại chân RTS của mạch 8250A đạt mức tích cực thấp để báo lμ UART sẵn sμng phát ký tự.
Ngoμi ra ta còn điều khiển đ−ợc các đầu ra phụ OUT1 vμ OUT2. Bằng các bit D2=OUT1=1 vμ D3=OUT2=1 ta có thể điều khiển tín hiệu tại các chân nμy sao cho OUT1=0 vμ OUT2=0.
Bit D4 =1 cho phép điều khiển mạch 8250A lμm việc ở chế độ nối vòng cục bộ để kiểm tra chức năng của UART.
Cụ thể, khi D4=1 ta có: + Sout = 1
+ Sin: không nối với bên ngoμi
+ Các thanh ghi dịch của phần phát (// → --) vμ phần thu (// ← -- ) nối vòng với nhau
+ Các chân điều khiển vμo của modem (DSR, CTS, RI, RLSD) không đ−ợc nối ra ngoμi mμ đ−ợc nối ở bên trong mạch với các chân điều khiển ra của modem (DTR, RTS, OUT1, OUT2)
Thanh ghi trạng thái modem (modem status register, MSR)
Thanh ghi nμy còn đ−ợc gọi lμ thanh ghi trạng thái vμo từ RS 232C vì nó cho biết trạng thái hiện thời của các tín hiệu điều khiển modem từ đ−ờng dây.
Dạng thức của thanh ghi MSR đ−ợc biểu diễn trên hình 9.40. D7 D6 D5 D4 D3 D2 D1 D0
0 0 0 LOOP OUT2 OUT1 RTS DTR
1: đ−a DTR = 0 Nối vòng cục bộ Điều khiển đầu ra phụ 0: đ−a DTR = 1
1: nối vòng 1: đ−a Outi = 0 1: đ−a RTS = 0 0: bình th−ờng 0: đ−a Outi = 1 0: đ−a RTS = 1
Hình 9.39. Dạng thức của thanh ghi MCR.
D7 D6 D5 D4 D3 D2 D1 D0
RLSD RI DSR CTS ΔRLSD ΔRI ΔDSR ΔCTS có giá trị của các bit 1: nếu RI có biến đổi kiểu
OUT2, OUT1, DTR, RTS 1: nếu có sự thay đổi của các tín hiệu t−ơng trong MCR khi bit LOOP=1 ứng so với lần đọc tr−ớc
Hình 9.40. Dạng thức của thanh ghi MSR.
Trong từ trạng thái để tại MSR, dấu delta (Δ) đứng tr−ớc các tín hiệu lμ để chỉ ra rằng trong khi 8250A hoạt động, nếu có sự thay đổi của các tín hiệu đó thì các bit t−ơng ứng sẽ đ−ợc lập, riêng đối với tín hiệu RI thì ΔRI ám chỉ sự thay đổi từ mức thấp lên mức cao.
Thanh ghi trạng thái đ−ờng dây (line status register, LSR)
Thanh ghi trạng thái đ−ờng dây cho biết trạng thái của việc truyền tín hiệu trên đ−ờng dây ra sao. Các tín hiệu THRE, BI, FE, PE, OE, RxDR đều có thể lμ các nguyên nhân gây ngắt nếu các bit cho phép t−ơng ứng trong thanh ghi IER đ−ợc lập.
D7 D6 D5 D4 D3 D2 D1 D0
0 TSRE THRE BI FE PE OE RxDR
Hình 9.41. Dạng thức của thanh ghi LSR.
Các bit của thanh ghi trạng thái đ−ờng dây có ý nghĩa nh− sau:
RxDR: Receiver data ready:
1: đã nhận đ−ợc 1 ký tự vμ để nó trong thanh ghi đệm thu (RBR), bit nμy bị xoá khi CPU đọc thanh ghi RBR.
OR: Overrun error (lỗi do thu đè)
1: có hiện t−ợng thu đè (có thể do CPU bị chậm), bit nμy bị xoá khi CPU đọc thanh ghi LSR.
PE: Parity error (lỗi parity)
1: có lỗi parity, bit nμy bị xoá khi CPU đọc LSR.
FE: Framing error (lỗi khung)
1: có lỗi khung (bit stop = 0 chẳng hạn), bit nμy bị xoá khi CPU đọc
thanh ghi LSR.
BI: Break interrupt (có sự gián đoạn trong khi truyền)
1: khi tín hiệu ở đầu vμo phần thu ở mức thấp lâu hơn thời gian dμnh cho một ký tự, bit nμy bị xoá khi CPU đọc thanh ghi LSR.
THRE: Transmitter holding register empty (thanh ghi giữ phát rỗng)
1: khi ký tự đã đ−ợc chuyển từ THR→TSR, bit nμy bị xoá khi CPU đ−a ký tự tới thanh ghi THR.
TSRE: Transmitter shìt register empty (thanh ghi dịch phát rỗng)
1: khi 1 ký tự đã đ−ợc phát đi, bit nμy bị xoá khi có một ký tự đ−ợc chuyển từ THR→TSR.
Ví dụ lập trình cho 8250A
Cách lập trình cho mạch UART 8250A hoạt động cũng giống nh− cách ta đã lμm với USART 8251A hoặc với các vi mạch lập trình khác đã đ−ợc giới thiệu rải rác trong tμi liệu nμy. Nếu dùng máy IBM PC vμ tham khảo thêm các tμi liệu liên quan thì ta còn lợi dụng đ−ợc các dịch vụ có sẵn của INT 14H của BIOS hoặc các lệnh có sẵn của DOS để thao tác rất thuận lợi với các thanh ghi trong mạch 8250A thông qua thao tác với cổng COM. Trong máy IBM PC địa chỉ đầu của cổng COM1 lμ 3F8H, đó cũng lμ địa chỉ cơ bản của 8250A, vì đây chính lμ địa chỉ của thanh ghi đệm thu
(RBR) vμ thanh ghi đệm giữ phát (THR). Các địa chỉ cho các thanh ghi khác có thể tính đ−ợc từ địa chỉ cơ bản nμy theo Bảnh 9.3. Trong các máy vi tính IBM với các bộ vi xử lý thế hệ sau của họ Intel 80x86, việc thao tác với cổng COM1 cũng dựa trên các địa chỉ cổng nμy.
L−u ý lμ trong các máy IBM PC, ta có thể có từ 1 đến 4 cổng thông tin nối tiếp mμ DOS gọi lμ các cổng COM1-COM4, nh−ng chúng lại đ−ợc BIOS phân biệt vμ đánh số từ 0-3.
Sau đây lμ một số ví dụ để thao tác với cổng COM.
Ví dụ 1: Dùng lệnh MODE của DOS để khởi đầu cho cổng COM1 với các thông số: 7 bit mã ký tự, tốc độ truyền 4.800 b/s, parity chẵn, 1 bit stop.
Giải
Lệnh DOS có dạng sau:
MODE COM1:48,E,7,1
Ví dụ 2: Dùng hμm 0 của ngắt 14H của BIOS để khởi đầu cho cổng COM1 với các thông số: 7 bit mã ký tự, tốc độ truyền 4.800 b/s, parity chẵn, 1 bit stop.
Giải
Các lệnh để khởi đầu cho COM1 có thể nh− sau (xem thêm cách sử dụng ngắt INT 14H của BIOS !):
MOV AH,0 ; hμm 0 để khởi đầu
MOV DX,0 ; COM1 đ−ợc BIOS coi lμ 0
MOV AL,11011010 ; 110~4.800 b/s,11~ parity chẵn ; 0~1 bit stop,10~7 bit mã
INT 14H
Ví dụ 3: Dùng các lệnh hợp ngữ để khởi đầu cho cổng COM1 với các thông số: 7 bit mã ký tự, tốc độ truyền 4.800 b/s, parity chẵn, 1 bit stop, không điều khiển gián đoạn ở Sout.
Giải
Địa chỉ cổng của thanh ghi LCR lμ 3FB (tính ra đ−ợc từ địa chỉ cơ bản 3F8) Từ lệnh cho LCR lμ để đạt yêu cầu đầu bμi: 0001 1010 =1AH
Địa chỉ cổng của thanh ghi số chia MSB lμ 3F9 với DLAB=1
Giả thiết dùng xung đồng hồ tần số 1,8432 MHz ở đầu vμo của UART vμ ta muốn có tốc độ truyền lμ 4.800 b/s, ta cần tính đ−ợc số chia (để ghi vμo thanh ghi số chia):
số chia = 1.843.200 /(4.800x16) = 24
Các lệnh hợp ngữ để khởi đầu cho COM1 có thể nh− sau:
MOV AL,80H ; 80H để đ−a vμo LCR tạo ra DLAB=1 MOV DX,3FBH; địa chỉ của LCR
OUT DX,AL
MOV AL,24 ; LSB của số chia
MOV DX,3F8H; địa chỉ của LBS của số chia
OUT DX,AL
MOV AL,0 ; MSB của số chia
MOV DX,3F9H; địa chỉ của MBS của số chia
OUT DX,AL
MOV AL,1AH ; từ quy định khuôn dạng dữ liệu MOV DX,3FBH; địa chỉ của LCR
OUT DX,AL ;4.800,parity chẵn,1 stop,7 bit mã
Chỉ qua một vμi ví dụ để khởi đầu cho mạch UART 8250A ở trên, rõ rμng lμ để đạt đ−ợc cùng một kết quả, nếu ta có hiểu biết nhất định về DOS vμ BIOS, đồng thời có khả năng sử dụng đ−ợc các chức năng có sẵn của chúng thì công việc phải lμm khi khởi đầu đã giảm nhẹ đ−ợc rất nhiều so với khi phải lập trình từ đầu bằng hợp ngữ.