Đặc tính CommEvent trả lại hầu hết sự kiện hoặc lỗi truyền thông gần nhất. Đặc tính này không có sẵn trong khi thiết kế và là chỉ đọc khi chạy chương trình Mặc dù sự kiện OnComm được phát sinh mỗi khi có một sự kiện hay lỗi truyền thông xảy ra ,nhưng đặc tính CommEvent lại chứa mã số của sự kiện hay là lỗi truyền thông đó .Như vậy để xác định xem điều gì đã xảy ra thì ta phải kiểm tra đặc tính CommEvent
Đặc tính ParityReplace đặt và trả lại ký tự dùng thay thế ký tự không hợp lệ trong dòng dữ liệu khi lỗi chẵn lẻ xảy ra.
Bit chẵn lẻ là bit được truyền cùng với các bit dữ liệu và được dùng cho việc kiểm tra lỗi .Khi dùng bit chẵn lẻ ,điều khiển truyền thông sẽ cộng tất cả các bit có giá trị bằng 1 và kiểm tra tổng số các bit đó xem là chẵn hay lẻ (tương ứng với việc xác lập bit chẵn lẻ khi mở cổng ) .Theo mặc định ,điều khiển dùng dấu chấm hỏi (?) để thay thế các ký tự không hợp lệ .Đặt ParityReplace là “ “ để bỏ khả năng thay thế ký tự khi lỗi chẵn lẻ xuất hiện .Sự kiện OnComm vẫn được phát sinh và thuộc tính CommEvent được đặt thành comEventRxParity
116 trang |
Chia sẻ: oanh_nt | Lượt xem: 2516 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Hệ thống đa xử lí, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
linh kiện, tốc độ truyền dữ liệu nhanh (truyền song song). Tuy nhiên, do khe cắm nằm bên trong máy tính nên khi muốn gắn card giao tiếp vào thì phải mở nắp ra, điều này gây bất tiện cho người sử dụng.
4.3.2.Giao Tiếp Qua Serial Port (Port COM).
IBM PC cung cấp 2 cổng nối tiếp: COM1 và COM2. Các cổng này giao tiếp theo tiêu chuẩn RS232. Chúng có thể được nối với một Modem để dùng cho mạng điện thoại, hay nối trực tiếp với một máy tính khác. Dữ liệu được truyền qua cổng này theo cách nối tiếp, nghĩa là dữ liệu được gởi đi nối tiếp nhau trên 1 đường dây. Do các dữ liệu được truyền đi từng bit một nên tốc độ truyền chậm, các tốc độ truyền có thể là 300, 600, 1200, 2400, 4800bps, 9600bps, chiều dài dữ liệu có thể là 5, 6, 7 hoặc 8 bit và kết hợp với các bit Start, Stop, Parity tạo thành một khung (frame). Ngoài ra cổng này còn có các điều khiển thu (Receive), phát (Trans), kiểm tra. Cách giao tiếp này cho phép khoảng cách truyền dữ liệu xa, tuy nhiên tốc độ truyền rất chậm tốc độ tối đa là 20kbps.
4.3.3.Giao Tiếp Qua Cổng PRINT (Cổng Máy In).
IBM PC cho phép sử dụng đến 3 cổng song song có tên là LP1, LP2 và LP3. Kiểu giao tiếp song song được dùng để truyền dữ liệu giữa máy tính và máy in. Khác với cách giao tiếp qua Port Com, ở cách giao tiếp này dữ liệu được truyền song song cùng một lúc 8 bit. Vì thế nó có thể đạt tốc độ cao.Connector của Port này có 25 chân bao gồm 8 chân dữ liệu và các đường tín hiệu bắt tay (Handshaking ).Tất cả các đường Data và tín hiệu điều khiển đều ở mức logic hoàn toàn tương thích với mức TTL. Hơn nữa, người lập trình có thể điều khiển cho phép hoặc không cho phép các tín hiệu tạo Interrupt từ ngõ vào nên việc giao tiếp đơn giản và dễ dàng. Tuy nhiên, giao tiếp với mức logic TTL nên khoảng cách truyền bị hạn chế so với cách truyền qua Port Com, đồng thời cáp truyền cũng phức tạp hơn. Đó là nhược điểm của cách giao tiếp này.
4.4. Giới Thiệu Về Truyền Thông Nối Tiếp :
Hiện nay các tiêu chuẩn truyền thông cũng theo hai hướng phân biệt nhau dựa vào cách truyền : song song hay nối tiếp. Cách truyền song song rất dễ bị nhiễu tác động nên không thể truyền đi xa được, do đó cũng ít được sử dụng. Truyền nối tiếp cũng có 2 loại : đồng bộ hay không đồng bộ. Trong cách truyền đồng bộ, dãy ký tự được truyền sẽ kèm theo ký tự đồng bộ là SYN (mã ASCII là 22). Phương thức này cho tốc độ truyền khá cao nhưng do mạch xử lý truyền và nhận (bao gồm mạch thêm ký tự đồng bộ, phát hiện và báo sai…) khá phức tạp nên chỉ dùng trong các ứng dụng có yêu cầu cao về tốc độ truyền. Còn trong các ứng dụng thông thường, nhất là các ứng dụng trong lĩnh vực điều khiển tự động, thì không có yêu cầu về tốc độ mà yêu cầu về độ tin cậy nhưng mạch thực hiện đơn giản, rẻ tiền. Khi đó, cách truyền không đồng bộ rất phù hợp. Theo cách truyền này thì các ký tự được truyền riêng rẽ, phân làm từng frame có bit bắt đầu, các bit dữ liệu của ký tự cần truyền, bit chẵn lẻ (để kiểm tra lỗi đường truyền), và các bit kết thúc.Trong khuôn khổ Luận Văn này ,ta chỉ sử dụng chuẩn truyền thông RS-232C (RS :Recommended Standard) ,là một chuẩn truyền nối tiếp bất đồng bộ rất phổ biến hiện nay.
Chuẩn này lần đầu tiên được giới thiệu vào năm 1962 do hiệp hội kỹ thuật điện tử EIA (Electronics Industries Association) đưa ra như là chuẩn giao tiếp truyền thông giữa máy tính và thiết bị ngoại vi như :modem, máy vẽ, mouse, máy tính khác ……
4.5. Cấu Tạo Cổng Truyền Nối Tiếp :
Bảng 4.1 Sắp xếp chân của cổng nối tiếp ở máy tính:
9 chân
25 chân
Chức năng
1
2
3
4
5
6
7
8
9
8
3
2
20
7
6
4
5
22
DCD _ Data Carrier Detect (Lối vào)
RxD _ Receive Data (Lối vào)
TxD _ Transmit Data (Lối ra)
DTR _ Data Terminal Ready (Lối ra)
GND _ Ground (Nối đất)
DSR _ Data Set Ready (Lối vào)
RTS _ Request to Send (Lối ra)
CTS _ Clear to Send (Lối vào)
RI _ Ring Indicator (Lối ra)
4.6. Các Chuẩn Truyền Nối Tiếp :
Ở dạng nối tiếp ta có rất nhiều chuẩn truyền như: RS-232, RS-422, RS-423, RS-449, RS-485 … do không đi sâu vào các chuẩn truyền này nên ta chỉ khảo sát sơ 2 chuẩn truyền RS-232 và RS-485 :
Bảng 4.2. So sánh các tiêu chuẩn truyền EIA:
Thông số
RS_232
RS_422
RS_423
RS_485
Cable length(max )
15m (50FT)
1.2km(4000FT)
1.2km(4000FT)
1.2km(4000FT)
Baud Rate
(tốc độ baud)
20Kps/15m
10Mbps/12m
10Mbps/120m
100Kbps/1.2km
100Kbs/9m
10Kbps/90m
1Kbps/1.2km
10Mbps/12m
1Mbps/120m
100Kbps/1.2km
Mode
Unbalanced
Balanced
Differental
Unbalnced
Differental
Balanced
Differental
Driver No
1
1
1
32
Receiver No
1
10
10
32
Logic 0
+5V®+15V
+2v ® +5V
+3.6V ® +6V
+1.5V ® +5V
Logic 1
-5V ® -15V
-2V ® -5V
-3.6V ® -6V
-1.5V ®-5V
Community
(truyền thông)
2V
1.8V
3.4V
1.3V
Cable/Signal
(Cáp / tín hiệu)
1
2
2
2
Methode
(Phương thức)
Simplex
Half_duplex
Full_duplex
Simplex
Half_duplex
Full_duplex
Simplex
Half_duplex
Full_duplex
Simplex
Half_duplex
Full_duplex
Short circuit
current
500mA
150mA
150mA
150mA
4.6.1 Phương Thức Truyền Dữ Liệu Của RS-232 :
Dữ liệu trao đổi diễn ra trên hai đường dẫn TxD và RxD. Qua chân cắm ra TxD, máy tính gởi dữ liệu của nó đến các thiết bị khác. Trong khi đó dữ liệu mà máy tính nhận được, lại được dẫn đến chân nối RxD. Các tín hiệu khác đóng vai trò như là tín hiệu hỗ trợ khi trao đổi thông tin và vì vậy không phải trong mọi ứng dụng đều dùng đến.
Các bit dữ liệu được gởi đi theo kiểu đảo ngược, nghĩa là các bit có giá trị “1” sẽ có mức điện áp LOW, các bit có giá trị “0” sẽ có mức điện áp HIGH. Mức tín hiệu nhận và truyền qua chân RxD và TxD thông thường nằm trong khoảng –12V đến +12V. Mức điện áp đối với mức HIGH nằm giữa +3V đến +12V.
Một chuỗi dữ liệu truyền đi theo dạng nối tiếp nhau trên một đường dẫn: bắt đầu bằng một bit khởi đầu (Start bit), tiếp theo đó là các bit dữ liệu (data bit), bit thấp đi trước. Số bit dữ liệu nằm trong khoảng 5 đến 8 bit, tiếp đó là bit kiểm tra chẳn lẻ (Parity) và cuối cùng là bit kết thúc (stop bit). Hình thức truyền này có khả năng dùng cho những khoảng cách lớn , bởi vì các khả năng gây nhiễu là nhỏ hơn là dùng cổng song song. Tốc độ truyền được thiết lập bằng tham số Baudrate, là số bit truyền đi trong 1 giây, thông thường là 300, 600, 1500, 2400, 4800, 9600 và 19200.
Một nhược điểm không nhỏ của cổng nối tiếp là tốc độ truyền dữ liệu bị hạn chế. Ví dụ như với tốc độ 9600 baud cho phép truyền nhiều nhất là 960 byte mỗi giây. Khuôn dạng dữ liệu (Frame) cần phải được thiết lập như nhau ở cả hai bên gởi cũng như nhận.
Start bit Stop bit
+12V
-12V D0 D1 D2 D3 D4 D5 D6 D7
1 1 0 1 0 0 1 0
T= 1/fbaud
1.04 ms
Hình 4.1. Dòng dữ liệu trên cổng RS_232 với tốc độ baud 9600baud.
Một trong những yêu cầu quan trọng của RS-232 là thời gian chuyển đổi từ một mức logic này tới mức logic khác không vượt qúa 4% thời gian 1 bit. Vì thế ở tốc độ 19200 thời gian chuyển mức logic phải nhỏ hơŮ .
Vấn đề này làm giới hạn chiều dài đường truyền . Với tốc độ truyền 19200 baud có thể truyền xa nhất là 50ft (1ft = 30.48cm, 15.24cm)
Một trong những vấn đề quan trọng cần chú ý khi sử dụng RS-232 là mạch thu phát không cân bằng ( đơn cực ). Điều này có nghĩa là tín hiệu vào được so với đất. Vì vậy, nếu điện thế tại hai điểm đất của hai mạch thu phát không bằng nhau thì sẽ có dòng điện chạy trên đất. Kết quả sẽ có áp rơi trên dây đất ( V= I.R ) sẽ làm suy yếu tín hiệu logic. Nếu truyền tín hiệu đi xa , R sẽ tăng dẫn đến áp rơi trên đất sẽ lớn dần đến lúc tín hiệu logic sẽ rơi vào vùng không xác định và mạch thu sẽ không nhận đúng dữ liệu được truyền từ mạch phát. Chính sự không cân bằng trên mạch thu phát là một trong những nguyên nhân giới hạn đường truyền.
4.6.2. Chuẩn RS-485:
Giao tiếp EIA RS-485 dựa trên chuẩn RS-422A , nó là một cải tiến của chuẩn này và có mở rộng giao tiếp ngoại vi. Đặc tính điện của nó giống như RS-422A. RS-485 là chuẩn truyền vi sai , sử dụng hai dây cân bằng, tốc độ truyền có thể đạt tới 10Mbps và chiều dài cáp truyền có thể lên đến 4000feet (khoảng 1.2km ). Điện áp vi sai ngõ ra từ +1.5V (+5V nếu là logic 0 và từ –1.5V( -5V nếu là logic1. Một đặc điểm khác biệt quan trọng của RS-485 là nó cung cấp đến 32 Drivers và 32 Receives trên cùng một đường truyền. Điều này cho phép tạo ra một mạng cục bộ. Để có khả năng như vậy, ngõ ra của driver RS-485 phải là ngõ ra 3 trạng thái. Nó có thể ở mức tổng trở cao để bus không bị chập khi có một driver truyền.
Với chuẩn mới này , tốc độ truyền , khoảng cách truyền được cải thiện rất nhiều. Dữ liệu nhận là phần khác nhau giữa dữ liệu không đảo (A) và dữ liệu đảo(A), không yêu cầu nối đất giữa thiết bị thu và thiết bị phát, Dữ liệu được truyền trên đường dây cân bằng, thường là cặp dây xoắn với một trở ở đầu cuối.
4.7. Lập Trình Cho Cổng RS-232 :
Đóng vai trò chủ đạo trong điều khiển quá trình truyền thông nối tiếp là vi mạch 8250 .Vi mạch này có thể được lắp ráp trên bản mạch chính của máy tính PC hoặc trên một card vào ra .Để lập trình cho cổng nối tiếp hoặc truyền thông nối tiếp ta phải hiểu cấu trúc ,các thanh ghi và cách lập trình để truy nhập tới vi mạch này .
Vi mạch 8250 lần đầu tiên được giới thiệu vào năm 1973 và nhanh chóng chiếm lĩnh vị trí được sử dụng rộng rãi trên các máy tính PC .Vi mạch này có 40 chân và được sử dụng để truyền và nhận dữ liệu theo cách nối tiếp và dị bộ (không đồng bộ) .Tên gọi bộ truyền nhận không đồng bộ vạn năng (UART : Universal Asynchronous Receiver / Transmitter) xuất phát từ chức năng của vi mạch 8250 trong mạch điện ghép nối với lối ra cổng nối tiếp của cổng RS-232C .
Trên mạch điện ,UART đảm nhiệm các chức năng chính như sau :
· Chuyển đổi tín hiệu song song đi từ đơn vị xử lý trung tâm của máy tính (CPU) thành tín hiệu nối tiếp để truyền ra khỏi máy tính và chuyển đổi tín hiệu nối tiếp đưa đến máy tính thành dạng song song để chuyển đến đơn vị xử lý trung tâm .
· Bổ sung các bit : bắt đầu ,chẵn lẻ ,dừng vào mỗi ký tự để hình thành khung truyền và lấy ra những bit đó từ các ký tự nhận được .
· Duy trì tình trạng các bit riêng biệt được phát ra với tốc độ truyền dữ liệu thích hợp, tính toán các bit chẵn lẻ trên các các ký tự nhận và truyền ,đồng thời thông báo cho hệ thống biết bất kỳ một sai sót nào đã được phát hiện .
· Thiết lập các tín hiệu bắt tay phần cứng thích hợp và thông báo trạng thái của các mạch đó .
Để thực hiện các chức năng kể trên, UART có các giao tiếp chính như sau :
· Giao tiếp với hệ thống BUS vào ra của CPU.
· Giao tiếp với tín hiệu đồng hồ hệ thống .
· Giao tiếp với cổng nối tiếp theo chuẩn RS-232C
Bộ thu phát dị bộ vạn năng UART được thiết kế riêng để điều khiển quá trình truyền thông không đồng bộ .Chip 8250 là chip cơ bản được thiết kế cho CPU 80286 ,hiện nay các chip thông dụng là UART 16450 và UART 16550A tương ứng với các BUS dữ liệu 16 bit và 32 bit .Đôi khi ta có ấn tượng là vi mạch 8250 đã là loại cũ ,bởi vì 8250 được sử dụng cho các máy tính đời đầu .Về sau được thay thế bằng các loại 16450 và các thế hệ tiếp theo như 16550 ,16750 .Vi mạch 16450 hoàn toàn giống với 8250 về chức năng và sự sắp xếp chân ,nhưng được chế tạo bằng một công nghệ khác và có khả năng hoạt động với tốc độ nhanh hơn. Tất cả những gì ta biết về vi mạch 8250 đều có thể vận dụng cho vi mạch 16450 .
So với loại 8250 ,vi mạch 16450 có thêm bộ nhớ vào trước ra trước (FIFO). Để hiểu được vai trò của bộ nhớ này ,ta lưu ý tới một đặc điểm chung của các vi mạch là : Xử lý chỉ từng ký tự ,cụ thể là khi nhận một ký tự mới mà ký tự trước đấy chưa được đọc ra thì sẽ xảy ra tình trạng mất mát dữ liệu .Để có thể thực hiện những nhiệm vụ khác một cách đồng thời ,ngay cả khi tốc độ truyền cao hơn , trong vi mạch 16450 đã được thêm vào hai bộ nhớ trung gian dùng cho việc truyền và nhận dữ liệu .Đây chính là bộ nhớ FIFO ,nhờ vậy mà ký tự được đọc ra luôn luôn ở trong hàng nhận.
Vi mạch 16550 là thế hệ được cải tiến về tốc độ của 16450 và có tính tương thích kế thừa với 16450 .Tất cả những gì ta biết về vi mạch 16450 và 8250 cũng có thể vận dụng cho vi mạch 16550 .Tất nhiên là vi mạch 16550 vẫn có những đặc tính riêng .Thế hệ mới nhất là vi mạch 16750 chứa thanh ghi FIFO (First In First Out ) 64 Kbyte và cho phép truyền dữ liệu với tốc độ đến 921,6 Kbps .
Các vi mạch này cho phép truyền dữ liệu với tốc độ cao hơn 8250 ,nhưng về nguyên tắc hoạt động thì không thay đổi .Vì vậy ,để tìm hiểu cơ chế truyền dữ liệu nối tiếp ,ta vẫn có thể bắt đầu với vi mạch 8250 .Ngoài ra, trên các máy tính sản xuất gần đây ,một số chức năng điều khiển truyền thông nối tiếp đã được tích hợp vào trong các vi mạch đa chức năng, nhưng bản thân chúng vẫn hoạt động như một linh kiện riêng lẻ.
Trong khuôn khổ luận văn này ,ta không trình bày chi tiết về cấu tạo cũng như cách vi mạch 8250 hoạt động .Ta chỉ trình bày sau đây các kiến thức liên quan đến kỹ thuật lập trình cho cổng RS-232 .Đó là các hiểu biết về các thanh ghi của UART 8250 ,cách lập trình và điều khiển ngắt cho cổng RS-232 .
4.7.1. Các thanh ghi của UART 8250 : được tóm tắt trong bảng sau :
Bảng 4.3. Các thanh ghi nội của bộ thu phát nối tiếp 8250 (không đồng bộ).
Register name
Code
COM1
COM2
COM3
COM4
Function
Transmitter holding register
THR
3F8H
2F8H
3E8H
2E8H
OUTPUT
Receiver data register
RDR
3F8H
2F8H
3E8H
2E8H
INPUT
Baud rate divisor (LSB)
BRDL
3F8H
2F8H
3E8H
2E8H
OUTPUT
Baud rate divisor (MSB)
BRDH
3F9H
2F9H
3E9H
2E9H
OUTPUT
Interrupt enable register
IER
3F9H
2F9H
3E9H
2E9H
OUTPUT
Interrupt ID register
IID
3FAH
2FAH
3EAH
2EAH
INPUT
Line control register
LCR
3FBH
2FBH
3EBH
2EBH
OUTPUT
Modem control register
MDC
3FCH
2FCH
3ECH
2ECH
OUTPUT
Line status register
LST
3FDH
2FDH
3EDH
2EDH
INPUT
Modem status register
MSR
3FEH
2FEH
3EEH
2EEH
INPUT
Các thanh ghi trong UART 8250 có thể chia ra làm ba loại :
Thanh ghi điều khiển (Control Register): dùng để nhận và thực hiện các lệnh từ CPU.
Thanh ghi trạng thái (Status Register): dùng để thông báo cho CPU biết UART đang làm gì.
Thanh ghi đệm (Buffer Register) : dùng để giữ ký tự trong lúc truyền hoặc xử lý.
Các thanh ghi này cũng giữ các ký tự nhị phân được truyền và nhận. Việc lựa chọn các thanh ghi được thực hiện qua địa chỉ và khối điều khiển. Mỗi thanh ghi được gán một địa chỉ so sánh tương đối (offset) với địa chỉ cơ sở của cổng nối tiếp. Các địa chỉ của hai cổng nối tiếp đầu tiên trong hầu hết các máy tính đã được tiêu chuẩn hóa.
Có thể nói : toàn bộ hoạt động của giao diện nối tiếp được điều khiển qua các thanh ghi của UART, trong đó thanh ghi đệm truyền / nhận dữ liệu thường được tính là hai thanh ghi. Do chỉ có 8 địa chỉ (xem thêm về cấu tạo của UART 8250) nên cần đến sự chuyển mạch bên trong thông qua bit DLAB (bit 7 của thanh ghi điều khiển đường truyền). Các địa chỉ của từng thanh ghi đều được tính theo khoảng cách đến địa chỉ cơ sở, khoảng cách này thường được gọi là offset. Tùy theo thanh ghi, offset nhận giá trị cụ thể trong khoảng từ 0 đến 7.
Vi mạch UART 8250 có tất cả 10 thanh ghi, sau đây ta sẽ lần lượt tìm hiểu các thanh ghi này :
4.7.1.1 Các Thanh Ghi Giữ :
Như thấy rõ từ tên gọi, các thanh ghi này thực chất là các bộ đệm được chuyên dùng để giữ một ký tự, ký tự này đã được nhận nhưng chưa được đọc, hoặc một ký tự đã được gửi tới cổng nối tiếp nhưng còn chưa được truyền đi. Khi mô tả quá trình truyền dữ liệu qua cổng nối tiếp ,các thanh ghi giữ (holding register) thường được gọi là các bộ đệm nhận hoặc bộ đệm truyền.
Việc sử dụng các bộ đệm nhận và truyền cũng là một đặc điểm của vi mạch 8250. Đặc điểm này cho phép một ký tự thứ hai được gửi tới cổng nối tiếp trước khi ký tự thứ nhất đã được truyền hoặc đọc xong xuôi bởi bộ xử lý. Trong thời gian chờ ký tự thứ nhất được truyền hoặc đọc, ký tự thứ hai nằm trong bộ đệm.
Sau đây ta sẽ thấy rõ hơn là : trạng thái của bộ đệm truyền và bộ đệm nhận được quy định bởi thanh ghi trạng thái đường truyền, cụ thể hơn là ở bit 7 của thanh ghi điều khiển đường truyền LCR (Line Control Register). Khi bit này được đặt bằng ‘0’ thì thao tác đọc từ địa chỉ cơ sở sẽ đọc từ bộ đệm RX và thao tác biết sẽ viết vào bộ đệm TX. Một thí dụ về quá trình này được minh họa trên hình sau:
Boä ñeäm TX
Boä ñeäm RX
3F8h
3F8h
TD
RD
Vieát vaøo boä ñeäm TX/RX
Ñoïc töø boä ñeäm TX/RX
Hình 4.2.Đọc ra và ghi vào từ bộ đệm TX/RX.
4.7.1.2. Thanh Ghi Điều Khiển Đường Truyền (Line Control Register):
Một thanh ghi khác trong vi mạch 8250 được gọi là thanh ghi điều khiển đường truyền LCR (Line Control Register). Thanh ghi này giữ các tham số được người lập trình thiết lập và xác định khuôn mẫu của cuộc trao đổi thông tin. Các thông tin về các bit dữ liệu, số lượng bit dừng và kiểu chẵn lẻ được sử dụng đều được cất giữ trong thanh ghi này. Dữ liệu có thể được viết vào thanh ghi này và được đọc ra sau đấy.
Bit cao của thanh ghi này gọi là bit chốt truy xuất hệ số chia. Nếu bit này được đặt lên 1 thì giá trị ở thanh ghi cơ sở được truy xuất làm byte thấp của thanh ghi hệ số chia chọn tốc độ truyền, và giá trị ở thanh ghi cơ sở +1 sẽ được truy xuất làm byte cao của thanh ghi hệ số chia chọn tốc độ truyền. Nếu bit này được xóa về 0 thì thanh ghi cơ sở sẽ thành thanh ghi đệm thu phát.
Địa chỉ Hex : 3FB (2FB):
7
6
5
4
3
2
1
0
Bit
Nội dung
Bit 0 Bit 1
00 : 5 bit data ; 01 : 6 bit data
10 : 7 bit data ; 11 : 8 bit data
Bit 2
0 : 1 bit stop
1 : 1,5 hay 2 bit stop
Bit 3
0 : không kiểm tra parity
1 : kiểm tra parity
Bit 4
1 : kiểm tra parity chẵn
0 : kiểm tra parity lẻ
Bit 5
1 : nếu bit 4 = 1; 0 : nếu bit 4 = 0
Bit 6
Cho phép cấm đường truyền nối tiếp
1 : ngõ ra bị xoá trắng ; 0 : cấm
Bit 7
1 : chọn hệ số chia;
0 : bộ đệm thu, phát
4.7.1.3. Thanh Ghi Tốc Độ Baud :
Tuy gọi là thanh ghi tốc độ baud nhưng trên thực tế trên thanh ghi không lưu trữ giá trị của tốc độ baud mà dữ liệu được truyền, trên hai thanh ghi 8 bit chỉ chứa số chia 16 bit được dùng để suy ra tốc độ baud. Tốc tộ baud được đặt bằng các nạp một số chia chiếm 16 bit, bằng 8 bit thấp hơn của số chia đặt trên địa chỉ bộ đệm TX/RX và 8 bit phía trên đặt trên địa chỉ kế tiếp sau bộ đệm TX/RX. Sự tăng gấp đôi số các thanh ghi là cần thiết vì khi bit 7 của thanh ghi LCR (thường viết tắt là DLAB) được đặt lại về giá trị logic 0 ,hai địa chỉ này gắn liền với bộ đệm nhận và bộ đệm truyền. Khi bit DLAB được đặt vào một giá trị logic 1 thì hai địa chỉ này gắn liền với hai chốt số chia .Các chốt số chia bao gồm 16 bit hay hai byte, được sắp xếp thành các bit có giá trị thấp LSB (least significant bit) và bit có giá trị cao hơn MSB (most significant bit), được sử dụng trong việc đặt tốc độ baud của hệ thống truyền thông.
Giá trị cất giữ trên hai thanh ghi này phụ thuộc vào tần số của bộ cộng hưởng thạch anh được nối với chân XTAL1 và XTAL2 (chân 16 và 17) của vi mạch 8250, cụ thể là giá trị này được nhân với 16 rồi được sử dụng để chia tần số của tín hiệu đồng hồ của cổng nối tiếp. Đồng hồ của cổng nối tiếp đã được tiêu chuẩn hóa trong các máy tính cá nhân đời đầu ở tần số 1,8432 MHz. Sau này sử dụng tần số 2,4576 MHz và 3,072 MHz
Nếu cần có tốc độ baud bằng 1200 baud thì theo cách tính sau đây sẽ có được giá trị số chia tương ứng.
Số chia = 96
Số chia = 060 Hex
Bởi vì các chốt số chia có độ rộng là hai byte, giá trị 060 Hex cần được chia ra để giữ trên hai thanh ghi LSB và MSB. Với giá trị tốc độ baud bằng 1200 trong thí dụ này, 60 Hex được cất giữ trong LSB (bit có giá trị nhỏ) và giá trị 0 được cất giữ trong MSB (bit có giá trị lớn hơn).
Bảng sau minh họa một số tốc độ baud và các giá trị số chia tương ứng dưới cả hai dạng thập phân và thập lục phân (Hex). Giá trị này của số chia được nạp vào bộ đệm TX/RX khi bit DLAB được một giá trị logic 1 đặt vào.
Bảng 4.5 Bảng tốc độ baud ứng với xung nhịp 1,8432 MHz
Tốc độ
baud muốn có
Số chia được dùng để tạo ra : 16xĐồng hồ
Sai số theo
phần trăm
(sai khác giữa
mong muốn
và thực tế )
Thập phân
Hex
50
75
110
134,5
150
300
600
1200
1800
2000
2400
3600
4800
7200
9600
2304
1536
1047
857
768
384
192
96
64
58
48
32
24
16
12
900
600
417
359
300
180
0C0
060
040
03A
030
020
018
010
00C
-
0,026
0,058
-
-
-
-
-
0,69
-
-
-
-
-
4.7.1.4. Thanh ghi trạng thái đường truyền (Line Status Register):
Thanh ghi trạng thái đường truyền (LSR : Line Status Register) được minh họa trên hình sau là một thanh ghi 8 bit, chứa thông tin về quá trình truyền dữ liệu qua cổng nối tiếp cần cung cấp cho bộ xử lý.
· Bit 0. Bit thông báo cho biết dữ liệu đã nhận được (DR: Data Received). Bit 0 được đặt vào một giá trị logic 1 khi dữ liệu đã được nhận và sẵn sàng để bộ xử lý đọc.
· Bit 1. Một giá trị logic 1 ở bit này có nghĩa là ký tự nhận trước đó đã bị mất vì nó không được đọc trước khi một ký tự mới được nhận. Ký tự mới đã ghi đè lên ký tự trước.
· Bit 2. Một giá trị logic 1 ở bit có nghĩa là ký tự đã được nhận có tính chẵn lẻ sai. Khi thanh ghi trạng thái đường dẫn (LSR) được đọc, bit này được đặt về giá trị logic 0.
· Bit 3. Nếu ký tự đã nhận không có một bit dừng hợp lệ thì bit 3 trong thanh ghi LSR được đặt vào một giá trị logic 1.
Địa chỉ Hex : 3FD (2FD)
Ñaët thaønh 1 khi kyù töï ñöôïc naïp vaøo boä ñeäm truyeàn .
0
S6
S5
S4
S3
S2
S1
S0
Loãi traøn
Loãi khung truyeàn
Loãi chaün leû
Tín hieäu laøm döøng ñöôïc phaùt hieän
Ñaët thaønh 1 khi döõ lieäu nhaän ñöôïc
Ñaët thaønh 1 khi boä ñeäm truyeàn troáng roãng .
Hình 4.3. Thanh ghi trạng thái đường truyền.
· Bit 4 : được quy định là bit gián đoạn ngắt (break interrupt bit). Bit này được tự động đặt vào một giá trị logic 1 khi dữ liệu nhận được đã được giữ ở một mức trống trên chiều dài của một từ dữ liệu.
· Bit 5: được quy định là bit báo hiệu trạng thái rỗng của bộ đệm truyền (THRE: Transmit Holding Register Empty). Bit này báo hiệu là cổng nối tiếp sẵn sàng tiếp nhận ký tự khác để được truyền.
· Bit 6 : Vị trí bit này là một bit chỉ để đọc. Khi bit này có giá trị logic 1 thì bộ truyền đang còn trống.
· Bit 7 : Không được sử dụng và luôn được đặt giá trị logic 0.
Để truy nhập lên thanh ghi trạng thái đường truyền ta lưu ý tới một số chức năng của thanh ghi này. Thanh ghi trạng thái đường truyền (LSR: Line Status Register) xác định trạng thái của bộ đệm truyền và bộ đệm nhận. Thanh ghi này chỉ dùng để đọc ra, tất cả các bit được tự động cài đặt bằng phần cứng. Vai trò các bit được minh họa trên hình trên. Khi xuất hiện lỗi trong quá trình truyền ký tự thì một( hoặc một vài ) bit lỗi được đặt bằng ’1’ .
Một điều rủi ro có thể xảy ra khi truyền dữ liệu là một ký tự mới có thể được viết vào bộ đệm truyền trước khi ký tự trước đấy đã được gửi. Ký tự mới này sẽ viết đè lên nội dung của ký tự đang được truyền. Để tránh tình trạng này bit S5 được kiểm tra để xác định xem liệu vẫn còn một ký tự ở trong bộ nhớ. Nếu có thì nó được đặt thành ‘1’, bằng không thì bộ đệm truyền là trống rỗng .
4.7.1.5. Thanh ghi cho phép ngắt :
Vi mạch 8250 có nhiều khả năng ngắt. Có hai thanh ghi được sử dụng để điều khiển và xác định các nguồn ngắt. Thanh ghi đầu tiên trong hai thanh ghi đó là thanh ghi cho phép ngắt IER (Interrupt Enable Register ) còn thanh ghi thứ hai là thanh ghi nhận dạng ngắt IIR (Interrupt Identification Register)
· Bit 0 .Mỗi lần nhận một ký tự thì một ngắt lại được tạo ra .Bit này được đặt lại (reset) sau khi ký tự đã được bộ vi xử lý đọc .
· Bit 1 .Nếu bit này được đặt một giá trị logic 1 thì bộ đệm truyền (thanh ghi giữ truyền) trống và một ngắt xuất hiện .
· Bit 2 : cho phép có sự thay đổi trong trạng thái đường truyền bộ nhận theo cách gây ra một ngắt.
Địa chỉ Hex 3FC (2FC)
7
6
5
4
3
2
1
0
1= Enable Data Available Interrupt
1= Enable Tx Holding Register Empty Interrupt
1= Enable Receive Line Status Interrupt
1= Enable Modem Status Interrupt
= 0
= 0
= 0
= 0
Bit
Hình 4.4. Thanh ghi cho phép ngắt.
· Bit 3: Cho phép có sự thay đổi trong trạng thái modem để ngắt bộ xử lý.
· Các Bit 4-7 : Các bit này luôn được đặt giá trị logic 0.
4.7.1.6. Thanh ghi nhận dạng ngắt :
Nếu như một ngắt xuất hiện thì phần mềm chương trình phải kiểm tra thanh ghi để xác định xem sự kiện nào đang gây ra ngắt. Thanh ghi nhận dạng ngắt IIR (Interrupt Identification Register) chứa đựng mã, nhận dạng điều kiện (ngắt) nào đang yêu cầu chú ý.
Hình sau minh họa thanh ghi IIR. Giữa các ngắt cũng có mức độ ưu tiên khác nhau. Tính ưu tiên có nghĩa là có một vài ngắt tỏ ra là “quan trọng” hơn các ngắt khác.
Địa chỉ Hex 3FA (2FA)
7
6
5
4
3
2
1
0
Bit
0 If Interrupt Pending
Interrupt ID Bit (0)
Interrupt ID Bit (1)
=0
=0
=0
=0
=0
Hình 4.5. Thanh ghi nhận dạng ngắt.
Bảng 4.6. Các mức ưu tiên của từng ngắt
Thanh ghi nhận dạng ngắt
CÁC NGẮT VÀ ĐẶT LẠI CHỨC NĂNG
Bit 2
Bit 1
Bit 0
Mức ưu tiên
Kiểu ngắt
Nguồn ngắt
Điều khiển đặt lại ngắt
Các file đính kèm theo tài liệu này:
- Hệ thống đa xử lí.doc