.3 Lập trình cho UART 8250A/16450

Một phần của tài liệu Ghép Nối Cấu Trúc Máy Tính ppt (Trang 29 - 33)

theo chuẩn RS 232C. Phần này sẽ giới thiệu về lập trình truyền thông qua các cổng COM và ngắt BIOS phục vụ vào/ra của các cổng COM.

.a Địa chỉ các cổng COM và ngắt 14h-dịch vụ BIOS cho cổng COM

Bảng địa chỉ cổng COM:

Cổng Địa chỉ I/O Yêu cầu ngắt

COM1 3F8-3FF IRQ 4

COM2 2F8-2FF IRQ 3

COM3 338-33F IRQ 5

COM4 238-23F IRQ 5

Các cổng COM3 và COM4 có thể không cần sử dụng mức ngắt như trên. Chúng có thể sử dụng các mức ngắt IRQ2, IRQ5, IRQ7 hoặc IRQ9. Dưới đây ta sẽ tìm hiểu về các chức năng của ngắt 14h -dịch vụ BIOS dành cho các cổng COM.

Hàm 0h:

− Ý nghĩa: Khởi tạo cổng COM. − Đầu vào:

 AH=0

 DX=số hiệu cổng COM (0-3)

 AL= tham số khởi tạo trong đó định dạng của AL như sau:

Tôc độ truyền (bits/giây) 000: 110 bits/ giây 001: 150 bits/ giây 010: 300 bits/ giây 011: 600 bits/ giây 100: 1200 bits/ giây 101: 2400 bits/ giây 110: 4800 bits/ giây 111: 9600 bits/ giây Bít chẵn lẻ X0: Không chẵn lẻ 01: Lẻ 11: Chẵn Độ dài bít ký tự Stop 0: 1 bít 1: 2 bít Độ dài mã ký tự 00: 5 bít 01: 6 bít 10: 7 bít 11: 8 bít  Int 14 (Sử dụng ngắt 14) − Đầu ra:

 AH = trạng thái của cổng vừa khởi tạo

Hàm 1h:

− Ý nghĩa: Ghi một kí tự ra cổng COM − Đầu vào:

 AH=1

 DX=số hiệu cổng COM (0-3)

 AL= Mã ASCII của kí tự

 Int 14h − Đầu ra:

 AH = trạng thái lỗi của cổng. Bít 7=1: có lỗi, bít 7=0 không có lỗi.

Hàm 2h: − Ý nghĩa: Nhận một kí tự ra cổng COM − Đầu vào:  AH=2  DX=số hiệu cổng COM (0-3) − Đầu ra:

 AH = trạng thái lỗi của cổng. Bít 7=1: có lỗi, bít 7=0 không có lỗi.

Hàm 3h:

− Ý nghĩa: Đọc trạng thái cổng COM − Đầu vào:

 AH=3

 DX=số hiệu cổng COM (0-3) − Đầu ra:

 AH = trạng thái cổng COM

 AL-= trạng thái modem. Chi tiết như sau. (adsbygoogle = window.adsbygoogle || []).push({});

Dạng thức của AH

Bit 7 Lỗi qua thời gian (timeout) Bit 6 Thanh ghi phát rỗng Bit 5 Thanh ghi nhận rỗng Bit 4 Cho phép ngắt Bit 3 Lỗi khung truyền Bit 2 Lỗi parity Bit 1 Lỗi đường truyền

Bit 0 Dữ liệu đã có trong bộ đệm

Dạng thức của AL

Bit 7 Phát hiện vật mang dữ liệu (Data Carrier Detect) Bit 6 Chỉ thị chuông (Ringing Indicator)

Bit 5 Sẵn sàng thiết lập dữ liệu (Data Set Ready) Bit 4 Xóa gửi (Clear To Send)

Bit 3 Phát hiện sóng mang dữ liệu Delta( Delta Data Carrier Detect) Bit 2 Chỉ thị chuông ở đuôi (Tailing Edge Ring Indicator)

Bit 1 Sẵn sàng thiết lập dữ liệu Delta (Delta Data Set Ready) Bit 0 Xóa gửi Delta (Delta Data Set Ready)

.b Lập trình cho UART 8250A

Ví dụ 1: Khởi tạo chế độ làm việc cho cổng COM3 với các thông số: 6 bít mã kí tự truyền , tốc độ truyền 2400 bits/ giây, parity chẵn, một bít stop.

101: 2400 bits/ giây 11: Chẵn

bít Stop

0: 1 bít 01: 6 ký tự AL=10111001=B9h

Đoạn mã chương trình sẽ được viết như sau:

Mov AH,0 ; khởi tạo

Mov DX,2 ; cổng COM3 có số hiệu 2 Mov AL,B9h

Int 14h

Ví dụ 2: Khởi tạo chế độ làm việc cho cổng COM1 với các thông số: 7 bít mã kí tự truyền , tốc độ truyền 4800 bits/ giây, parity chẵn, một bít stop không điều khiển gán đoạn ở Sout.

Địa chỉ cổng của thanh ghi điều khiển đường truyền là 3FB (tính từ địa chỉ cơ sỏ 3F8) Giá trị của của thanh ghi điều khiển đường truyền là:

D7 D6 D5 D4 D3 D2 D1 D0

0 0 0 1 1 0 1 0

AL=00011010 = 1Ah

Địa chỉ cổng của thanh ghi số chia LSB là 3F8 với DLAB=1 Đị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 4.800 bits/giây, ta cần tính số chia để ghi giá trị số chia vào thanh ghi số chia Số chia = 1.843200/(4.800x16)=24

Đoạn mã chương trình sẽ được viết như sau:

Mov AL,80 ; đưa vào LCR để tạo ra DLAB=1 Mov DX,3FBH ; địa chỉ LCR

Out DX,AL

Mov AL,24 ; đưa vào LSB của số chia Out DX,AL

Mov AL,0 ; đưa vào MSB của số chia Mov DX,3F9H ; địa chỉ MSB của số chia Out DX,AL

Mov AL,1AH ; qui định khuôn dạng dữ liệu Mov DX,3FBH ; địa chỉ LCR (adsbygoogle = window.adsbygoogle || []).push({});

Out DX,AL

.II Một số kỹ thuật lập trình ghép nối cơ bản

Một phần của tài liệu Ghép Nối Cấu Trúc Máy Tính ppt (Trang 29 - 33)