You are on page 1of 132

ĐẶT VẤN ĐỀ

Ngày nay, kỹ thuật vi điện tử đã có những bước tiến rất dài và tạo ra những
thành tựu lớn lao phục vụ cho các hoạt động khoa học kỹ thuật, kinh tế, ... của con
người. Máy tính điện tử, với tư cách là một trong những thành quả vĩ đại, ngày
càng khẳng định vai trò quan trọng của mình trong việc hỗ trợ mọi mặt của đời
sống xã hội.
Với ý nghĩa đó, việc đưa vào giảng dạy và học tập môn học Cấu trúc máy
tính cho các hệ đào tạo Đại học, Cao đẳng và Trung học chuyên nghiệp nhằm trang
bị cho học sinh, sinh viên những kiến thức cơ bản về cấu trúc và hoạt động của
máy tính IBM PC – là chuẩn máy tính cá nhân được sử dụng phổ biến nhất trên thế
giới. Từ những kiến thức cơ bản đó, học sinh, sinh viên có thể từng bước hướng tới
việc làm chủ máy tính và điều khiển được các thiết bị khác nhau thông qua máy
tính.
Tập bài giảng môn học Cấu trúc máy tính phục vụ cho quá trình giảng dạy
đối với hệ đào tạo đại học chính quy, dài hạn các chuyên ngành Điện tử viễn
thông, Kỹ thuật điều khiển và Công nghệ thông tin trong thời gian 60 tiết bao gồm
những nội dung chủ yếu sau đây:
Bài 1: TỔNG QUAN VỀ MÁY TÍNH
Bài này đề cập tới một số khái niệm cơ bản, ý nghĩa, ứng dụng, các nguyên
lý xây dựng máy tính PC.
Bài 2: TỐ CHỨC CỦA MÁY TÍNH ĐIỆN TỬ
Bài này mô tả kiến trúc chung và các hoạt động điển hình của hệ thống máy
tính, qua đó chỉ rõ chức năng cơ bản của từng thành phần cũng như mối quan hệ
giữa những thành phần đó.
Bài 3: BỘ VI XỬ LÝ CỦA INTEL
Bài này trình bày kiến trúc điển hình của các thế hệ bộ vi xử lý của hãng
Intel được sử dụng trong các hệ thống máy tính cá nhân hiện nay.
Bài 4: TỔ CHỨC HỆ THỐNG BUS

1
Bài này trình bày cấu trúc, chức năng, cơ chế hoạt động của hệ thống BUS
trong máy tính, một số loại BUS trong một số loại máy tính thông dụng hiện nay.
Bài 5: TỔ CHỨC BỘ NHỚ MÁY TÍNH VÀ CƠ CHẾ DMA
Bài này đề cập tới khái niệm, chức năng, cách thức tổ chức và kiến trúc tống
thể của bộ nhớ trong máy tính điện tử.
Bài 6: CỔNG TRAO ĐỔI THÔNG TIN SONG SONG VỚI NGOẠI VI
Bài này giới thiệu các chế độ trao đổi thông tin song song của máy tính,
nguyên tắc làm việc và thiết bị hỗ trợ.
Bài 7: HOẠT ĐỘNG NGẮT VÀ TÀI NGUYÊN NGẮT CỦA MÁY TÍNH
Bài này đặt vấn đề về các cơ chế điều khiển hoạt động của máy tính PC khi
tính đến khả năng ghép nối với nhiều thiết bị khác nhau; phần cứng và phần mềm
điều khiển ngắt.
Bài 8: HOẠT ĐỘNG TRUYỀN TIN NỐI TIẾP CỦA PC
Bài này giới thiệu máy tính PC với vai trò là một thiết bị truyền thông tin
với hai khả năng kết nối điển hình là qua cổng COM và giao diện tuần tự đa năng
USB.
Bài 9: CÁC THIẾT BỊ NGOẠI VI
Bài này giới thiệu cấu tạo, chức năng và hoạt động của một số thiết bị ngoại
vi thông dụng của máy tính như màn hình, bàn phím, chuột, ổ đĩa cứng, ổ đĩa
mềm, ổ đĩa CD, ...

Để có thể tiếp thu tốt các nội dung của môn học, học sinh – sinh viên trước
hết cần có kiến thức tốt về Kỹ thuật số, Kỹ thuật vi xử lý; có khả năng hiểu và sử
dụng được một trong những ngôn ngữ lập trình điều khiển hệ thống trên máy tính
như: ASSEMBLY, FORTRAN, C/C++, PASCAL/DELPHI,.... Các nguồn tài liệu
tham khảo có thể kể đến là:
1. Cấu trúc máy tính - Nguyễn Tăng Cường, Phan Quốc Thắng - Học viện
Kỹ thuật quân sự, 2002.
2. Giáo trình Kiến trúc máy tính - Hoàng Hải Xanh - Đại học Điện lực,
2006.

2
3. Kỹ thuật vi xử lý và lập trình ASSEMBLY cho hệ vi xử lý - Đỗ Xuân
Tiến - NXB Khoa học và Kỹ thuật, 2002.
4. Máy tính IBM PC và lập trình ASSEMBLY cho IBM PC - Hoàng Đức
Hải - NXB Khoa học và Kỹ thuật, 1999.
5. Kỹ thuật lập trình điều khiển hệ thống - Đỗ Xuân Tiến - NXB Khoa học
và Kỹ thuật, 2002.
7. Các giáo trình, tài liệu liên quan đến các ngôn ngữ lập trình hệ thống
thông dụng hiện nay.

3
NỘI DUNG BÀI GIẢNG

Bài 1: TỔNG QUAN VỀ MÁY TÍNH


1.1 Giới thiệu chung
1.1.1 Giới thiệu
Máy tính (computer) - còn gọi là máy điện toán - là những thiết bị hay hệ
thống dùng để lưu trữ, xử lý thông tin. Máy tính được cấu thành bởi các thành
phần chức năng cơ bản đã xây dựng trước. Quá trình tác động tương hỗ phức tạp
của các thành phần này tạo cho máy tính có tiềm năng to lớn trong xử lý thông tin.
Nếu chương trình máy tính được xây dựng một cách chính xác, máy tính có thể mô
phỏng lại một số khía cạnh của một vấn đề hay của một hệ thống nào đó trong thế
giới thực.
Kể từ khi ra đời từ những năm 1950, những tiến bộ trong khoa học và công nghệ không
ngừng phát triển, các tính năng của máy tính được ngày càng hoàn thiện. Tuy nhiên, các nguyên
lý hoạt động cũng như kiến trúc của máy tính vẫn chưa thay đổi đáng kể. Bài này tập trung giới
thiệu các nguyên lý thiết kế máy tính cơ bản.
1.1.2 Máy tính điện tử
Do sự phát triển nhanh của lĩnh vực ứng dụng máy tính, đã có nhiều quan
niệm khác nhau về máy tính điện tử. Theo nghĩa chung nhất, người ta quan niệm
máy tính điện tử (người ta thường gọi tắt là máy tính) như sau : “máy tính điện tử
là phương tiện được xây dựng dựa trên các linh kiện điện tử để thực hiện các phép
tính toán, biến đổi toán học,...”.
Có hai loại máy tính điện tử đó là :
- Máy tính số (Digital Computer) là máy tính có nhiệm vụ xử lý dữ liệu được
biểu diễn dưới dạng các đại lượng rời rạc như : bóng đèn, transistor,….
- Máy tính tương tự làm việc với các dữ liệu được biểu diễn dưới dạng các đại
lượng liên tục điện từ, điện áp,…
Hệ thống máy tính thường được cấu thành bởi hai thành phần đó là phần
cứng và phần mềm :

4
- Phần cứng (Hardware) là các đối tượng vật lý hữu hình như : bản mạch
chính (Mainboard), bộ nhớ trong (RAM), đĩa cứng (HardDisk), màn hình (Display
Screen),…
- Phần mềm (Software): là các chương trình được cài đặt trên máy tính nhằm
thực hiện các thao tác theo yêu cầu của con người. Mỗi phần mềm máy tính là một
ánh xạ của phần cứng máy tính, hay còn gọi là máy ảo.
1.1.3 Phân loại máy tính
Dựa vào kích thước vật lý, hiệu suất và lĩnh vực sử dụng, người ta chia máy
tính số thành 5 loại cơ bản sau, các loại có thể trùm lên nhau một phần:
- MicroComputer: còn gọi là PC (personal computer), là những máy tính
có kích thước nhỏ, năng lực lưu trữ và tính toán thấp. MicroComputer thường được
dùng bởi một người và thực thi các ứng dụng phục vụ cho công việc cá nhân như
các ứng dụng văn phòng, giải trí, ...
- MiniComputer: là những máy tính cỡ trung bình, kích thước thường lớn
hơn PC. MiniComputer có khả năng hỗ trợ hàng trăm người sử dụng đồng thời, và
thường dùng để thực hiện các ứng dụng có khối lượng tính toán lớn như dịch vụ
Web, dịch vụ Mail,….
- Mainframe: là loại máy tính cỡ lớn, có khả năng hỗ trợ hàng ngàn người
sử dụng tính đa dụng. Nó có thể dùng cho các ứng dụng quản lý hoặc xử lý các
giao dịch như trong ngân hàng,…cũng như các tính toán khoa học. Mainframe
thường dùng kỹ thuật xử lý song song và có hệ thống vào/ra mạnh. Giá một máy
tính lớn có thể từ vài trăm ngàn USD đến hàng triệu USD.
- SuperComputer: Đây là các siêu máy tính, đắt tiền nhất và tính năng kỹ
thuật cao nhất, được thiết kế đặc biệt để đạt được tốc độ thực hiện các phép tính
dấu phẩy động cao nhất có thể được. Các siêu máy tính thường là các máy tính
vectơ hay các máy tính dùng kỹ thuật vô hướng và được thiết kế để tính toán khoa
học, mô phỏng các hiện tượng. Các siêu máy tính được thiết kế với kỹ thuật xử lý
song song với rất nhiều bộ xử lý (hàng ngàn đến hàng trăm ngàn bộ xử lý trong
một siêu máy tính).

5
1.2 Nguyên lý thiết kế máy tính cơ bản
1.2.1 Nguyên lý Turing
Alan Turing (1912 - 1954) là một nhà toán học người Anh đã đưa ra một
thiết bị tính đơn giản gọi là máy Turing. Về lý thuyết, mọi quá trình tính toán có
thể được thì đều có thể mô phỏng lại trên máy Turning. Máy Turning gồm có :
- Một bộ điều khiển trạng thái hữu hạn (finite control), trong đó có các
trạng thái đặc biệt như trạng thái khởi đầu và trạng thái kết thúc.
- Một băng ghi (tape) chứa tín hiệu trong các ô.
- Một đầu đọc (head) và ghi có thể di chuyển theo 2 chiều trái hoặc phải
một đơn vị.

Hình 1.1: Sơ đồ máy Turing


Ðầu đọc/ghi mang chức năng thông tin nối giữa Bộ điều khiển hữu hạn và
băng ghi. Ðầu bằng cách đọc dấu hiệu từ băng và cũng dùng nó để thay đổi dấu
hiệu trên băng. Bộ kiểm soát vận hành theo từng bước riêng biệt; mỗi bước nó thực
hiện 2 chức năng tùy thuộc vào trạng thái hiện tại của nó và tín hiệu hiện tại của
băng:
(1) Ðặt bộ điều khiển ở trạng thái ban đầu q1, băng trắng và đầu đọc/ghi chỉ
vào ô khởi đầu.
(2) Nếu:
(a) trạng thái hiện tại q trùng với trạng thái kết thúc qo thì máy sẽ dừng.
(b) ngược lại, trạng thái q sẽ chuyển qua q, tín hiệu trên băng s thành s và đầu đọc
dịch chuyển sang phải hoặc trái một đơn vị. Máy hoàn thành xong một bước tính
toán và sẵn sàng cho bước tiếp theo.
1.2.2 Nguyên lý Von Neumann

6
Năm 1946, nhà toán học Mỹ Von Neumann (1903 - 1957) đã đề ra một
nguyên lý máy tính hoạt động theo một chương trình được lưu trữ và truy nhập
theo địa chỉ. Nguyên lý này được trình bày ở một bài báo nổi tiếng nhan đề: “Thảo
luận sơ bộ về thiết kế logic của máy tính điện tử”. Nội dung nguyên lý Von
Neumann gồm:
(i) Máy tính có thể hoạt động theo một chương trình đã được lưu trữ
Theo Von Neumann, chúng ta có thể tập hợp các lệnh cho máy thi hành theo
một chương trình được thiết kế và coi đó như một tập dữ liệu. Dữ liệu này được cài
vào trong máy và được truyền bằng xung điện. Ðây là một cuộc cách mạng mới
cho máy tính nhằm tăng tốc độ tính toán vào thời đó vì trước kia máy chỉ có thể
nhận được các lệnh từ băng giấy hoặc bìa đục lỗ và nạp vào bằng tay. Nếu gặp bài
toán lặp lại nhiều lần thì cũng tiếp tục bằng cách nạp lại một cách thủ công như
vậy gây hạn chế trong tính toán sử dụng.
(ii)Bộ nhớ được địa chỉ hóa
Mỗi dữ liệu đều có một địa chỉ của vùng nhớ chứa số liệu đó. Như vậy để
truy nhập dữ liệu ta chỉ cần xác định địa chỉ của nó trên bộ nhớ.
(iii) Bộ đếm của chương trình
Nếu mỗi câu lệnh phải dùng một vùng nhớ để chứa địa chỉ của câu lệnh tiếp
theo thì không gian bộ nhớ sẽ bị thu hẹp. Ðể khắc phục hạn chế này, máy được gắn
một thanh ghi để chỉ ra vị trí của lệnh tiếp theo cần được thực hiện và nội dung của
nó tự động được tăng lên mỗi lần lệnh được truy cập. Muốn đổi thứ tự lệnh ta chỉ
cần thay đổi nội dung thanh ghi bằng một địa chỉ của lệnh cần được thực hiện tiếp.

7
Bài 2: TỔ CHỨC CỦA MÁY TÍNH

2.1 Kiến trúc chung của máy tính


Kể từ khi ra đời cho đến nay, kiến trúc cơ sở của các máy vi tính ngày nay
không thay đổi nhiều. Mọi máy tính số đều được hình thành từ các thành phần
chính sau: bộ xử lý trung tâm (CPU: Central Processing Unit), bộ nhớ trong, bộ
phận Vào/Ra thông tin. Các bộ phận trên được kết nối với nhau thông qua các hệ
thống Bus. Hệ thống Bus bao gồm: bus địa chỉ, bus dữ liệu và bus điều khiển. Bus
địa chỉ và bus dữ liệu dùng trong việc chuyển dữ liệu giữa các bộ phận trong máy
tính. Bus điều khiển làm cho sự trao đổi thông tin giữa các bộ phận được đồng bộ.
Thông thường người ta phân biệt một bus hệ thống dùng trao đổi thông tin giữa
CPU và bộ nhớ trong (thông qua cache), và một bus Vào/Ra dùng trao đổi thông
tin giữa các bộ phận Vào/Ra và bộ nhớ trong. Một chương trình sẽ được sao chép
từ đĩa cứng vào bộ nhớ trong cùng với các thông tin cần thiết cho chương trình
hoạt động, các thông tin này được nạp vào bộ nhớ trong từ các bộ phận các thiết bị
vào dữ liệu (ví dụ như một bàn phím hay một đĩa từ). Bộ xử lý trung tâm sẽ đọc
các lệnh và dữ liệu từ bộ nhớ, thực hiện các lệnh và lưu các kết quả trở lại bộ nhớ
trong hay cho xuất kết quả ra bộ phận xuất thông tin (màn hình hay máy in).

Data Bus

Control Bus

Thiết bị vào
Bộ nhớ (Input Unit)
Bộ xử lý
Bộ nhớ trong ngoài Phối ghép
trung
(Memory) (Mass store vào/ra
tâm ROM-RAM Unit) (I/O)
(CPU) Thiết bị ra
(Output
Unit)

Adrress
Bus

8
Hình 2.1: Kiến trúc chung của máy tính
Thành phần cơ bản của một máy tính bao gồm :
Bộ nhớ trong: Đây là một tập hợp các ô nhớ, mỗi ô nhớ có một số bit nhất
định và chứa một thông tin được mã hoá thành số nhị phân mà không quan tâm
đến kiểu của dữ liệu mà nó đang chứa. Các thông tin này là các lệnh hay số liệu.
Mỗi ô nhớ của bộ nhớ trong đều có một địa chỉ. Thời gian thâm nhập vào một ô
nhớ bất kỳ trong bộ nhớ là như nhau. Vì vậy, bộ nhớ trong còn được gọi là bộ nhớ
truy cập ngẫu nhiên (RAM - Random Access Memory). Độ dài của một từ máy
tính (computer word) là 32 bit (hay 4 byte), tuy nhiên dung lượng một ô nhớ thông
thường là 8 bit (1 Byte).
Bộ xử lý trung tâm (CPU - Central Processing Unit): Đây là bộ phận thi
hành lệnh của máy tính, CPU lấy lệnh và lấy các số liệu mà lệnh đó xử lý từ bộ
nhớ trong để tiến hành xử lý. Bộ xử lý trung tâm gồm có hai phần: phần thi hành
lệnh và phần điều khiển. Phần thi hành lệnh bao gồm bộ số học và logic (ALU:
Arithmetic And Logic Unit) và các thanh ghi. Nó có nhiệm vụ làm các phép toán
trên số liệu. Phần điều khiển có nhiệm vụ đảm bảo thi hành các lệnh một cách tuần
tự và tác động các mạch chức năng để thi hành các lệnh.

Hình 2.2 : Sơ đồ hoạt động của máy tính PC

9
Bộ phận Vào/ Ra (I/O – Input/Output): đây là bộ phận xuất nhập thông tin,
bộ phận này thực hiện sự giao tiếp giữa máy tính và người dùng hay giữa các máy
tính với môi trường (như là các hệ thống khác trọng mạng máy tính, ...). Các bộ
phận Vào/Ra thường gặp là: bộ lưu trữ ngoài, màn hình, máy in, bàn phím, chuột,
máy quét ảnh, các giao diện mạng cục bộ hay mạng diện rộng...
Sự khác biệt quan trọng nhất của các hệ máy tính là kích thước và tốc độ. Sự
phát triển không ngừng của các thế hệ máy tính nhờ vào hai yếu tố quan trọng, đó
là sự phát triển của công nghệ chế tạo IC và công nghệ chế tạo bộ nhớ.
2.2 Hoạt động chung của hệ thống máy tính
Các đơn vị chức năng và mối quan hệ của chúng có thể được minh họa bằng
hình 2.3 dưới đây (Các đường vẽ bằng nét đứt chỉ mối quan hệ điều khiển. Các
đường vẽ bằng nét liền là các con đường truyền dữ liệu). Có thể mô tả sự hoạt
động của máy tính một cách khái quát như sau:
Trước hết các chương trình và số liệu ban đầu được đưa vào bộ nhớ trong,
đó thường là bộ nhớ bán dẫn RAM. Khi bắt đầu thi hành chương trình, lệnh đầu
tiên trong tập lệnh đã được tích lũy ở bộ nhớ trong được đưa vào đơn vị điều khiển
- CU.
CU tiến hành giải mã lệnh, nếu việc giải mã cho thấy lệnh cần một hay một
số toán hạng thì nó sẽ xác định xem toán hạng đó nằm ở đâu trong bộ nhớ, việc
này thường được gọi là tính địa chỉ các toán hạng. Toán hạng là thành phần tham
gia phép tính cơ bản. Ví dụ như một phép cộng có thể có hai toán hạng là hai số
hạng tham gia phép cộng. Còn khi cộng một dãy hơn hai số hạng thì phải thực hiện
theo một thuật toán chẵng hạn như công liên tiếp từng số hạng với tổng.
Sau khi tính địa chỉ các toán hạng, CU sẽ phát ra tín hiệu điều khiển tới các
thành phần cần thiết của hệ thống để lấy các toán hạng về, đặt vào các thanh ghi
bên trong đơn vị tính toán ALU. CU phát tín hiệu điều khiển tới ALU để ALU
thực hiện phép toán trên các toán hạng đã lấy về. Kết quả phép toán có thể được để
trong ALU để nó tham gia vào các phép toán tiếp theo hoặc đưa vào bộ nhớ trong.
Điều này tùy thuộc vào mã lệnh mà CU đã nhận vào và giải mã. Nếu CU giải mã
và thấy rằng, mã lệnh cho biết cần tiến hành rẽ nhánh chương trình, nó sẽ tính địa

10
chỉ bộ nhớ của lệnh kế tiếp cần thực hiện và phát ra các tín hiệu điều khiển để lấy
lệnh kế tiếp về, sau đó mọi việc lại diễn ra lặp lại tương tự như quá trình trên trên.
Nếu sau khi giải mã, CU thấy rằng không cần rẽ nhánh chương trình, nó sẽ
phát ra tín hiệu điều khiển để lấy về lệnh ngay sau nó trong bộ nhớ, sau đó mọi
việc lại diễn ra lặp lại tương tự như quá trình trên.

Hình 2.3: Mối quan hệ logic giữa các thành chức năng trong máy tính
Quan hệ giữa bộ nhớ trong và ALU là quan hệ 2 hướng, tức là số liệu sau
khi đã được đưa vào xử lý trong ALU theo đúng ý muốn của người lập chương
trình sẽ lại được đưa ra bộ nhớ trong để sau đó khi có lệnh từ CU số liệu này có thể
được đưa ra thiết bị ra.
Qua mối quan hệ nêu trên ta thấy rằng, CU, ALU và Bộ nhớ trong tham gia
trực tiếp vào quá trình xử lý số liệu, chính vì vậy mà chúng còn được gọi là Đơn vị
xử lý trung tâm - CPU.
Tập hợp các thiết bị vào và thiết bị ra thường được gọi bằng một cái tên
chung là thiết bị ngoại vi (thuật ngữ tiếng Anh là Peripherals, hoặc I/O Devices).
Có những thiết bị trong quá trình hoạt động của máy tính khi thì đóng vai trò của
thiết bị vào, khi thì đóng vai trò của thiết bị ra ví dụ như đĩa cứng, đĩa CD. Thông
11
tin trao đổi giữa bộ nhớ ngoài và hệ thống máy tính luôn thông qua bộ nhớ trong,
dưới sự điều khiển của CU. Bộ nhớ ngoài của các máy tính ngày nay được sử dụng
thường xuyên nên tốc độ hoạt động của chúng có ảnh hưởng nhiều tới tốc độ
chung của hệ thống máy tính.
2.3 Sự phân mức của hệ thống máy tính
2.3.1 Giới thiệu
Máy tính được tạo ra nhằm giải quyết các vấn đề bằng cách thực hiện các
chỉ thị do con người cung cấp. Chuỗi các chỉ thị này gọi là chương trình. Các mạch
điện tử trong một máy tính số sẽ thực hiện một số giới hạn các chỉ thị đơn giản cho
trước, tập chỉ thị này gọi là tập lệnh của máy tính. Ví dụ như chỉ thị cộng hai số, so
sánh với số 0, các phép toán logic,... Tất cả các chương trình muốn thực thi đều
phải được biến đổi sang tập lệnh trước khi được thi hành.
Tập lệnh của máy tính tạo thành một ngôn ngữ giúp con người có thể điều
khiển hoạt động của máy tính, ngôn ngữ này gọi là ngôn ngữ máy. Tuy nhiên, hầu
hết các ngôn ngữ máy đều đơn giản để thực hiện. Người ta đã thiết kế và xây dựng
tập các lệnh từ tập các chỉ thị ban đầu của máy tính để có thể thực hiện được các
yêu cầu phức tạp hơn, tập các lệnh này thích hợp với con người hơn. Ngôn ngữ
máy sẽ được gọi là ngôn ngữ cấp 1 (L1) và ngôn ngữ vừa được hình thành gọi là
ngôn ngữ cấp 2 (L2). Một phương pháp thực thi chương trình L2 là chuyển một
lệnh trong L2 bằng một chuỗi các lệnh tương đương trong L1. Kết quả là sẽ tạo
thành một chương trình L1 và máy tính sẽ thực hiện chương trình tương đương L1
thay vì thực hiện chương trình L2, kỹ thuật này gọi là biên dịch (compile). Một
cách thực hiện chương trình L2 khác là mỗi lệnh trong chương trình L2 sẽ được
ánh xạ sang một chuỗi lệnh tương đương trong L1 sau đó tiến hành thực hiện lệnh,
tiếp đến là tiến hành thực hiện câu lệnh tiếp theo của chương trình L2 một cách
tương tự, quá trình này lặp cho đến câu lệnh cuối cùng trong chương trình L2 được
thực hiện. Kỹ thuật thực hiện này được gọi là thông dịch (interprete), nó không yêu
cầu tạo ra một chương trình mới trong L1.
Biên dịch và thông dịch đều thực hiện chương trình L2 thông qua tập lệnh
trong chương trình L1. Chúng khác nhau ở chỗ là khi biên dịch thì toàn bộ chương

12
trình L2 sẽ được chuyển thành chuỗi lệnh L1 rồi sau đó mới được thực thi còn đối
với phương pháp thông dịch thì sẽ thực thi từng lệnh trong L2. Để thuận tiện hơn,
ta giả sử tồn tại một máy tính sử dụng ngôn ngữ máy là L2, ta gọi máy tính này là
máy ảo (virtual machine). Tuy nhiên, trong thực tế, để có thể thực hiện biên dịch
và thông dịch, các ngôn ngữ L1 và L2 không được khác nhau nhiều. Do đó, ngôn
ngữ L2 cũng không thật sự thuận lợi cho người lập trình. Vì vậy, người ta đã xây
dựng một tập lệnh dựa trên sử dụng các lệnh trong tập lệnh L2, tập lệnh mới này
tạo thành một ngôn ngữ và ta gọi là ngôn ngữ L3. Ta có thể viết các chương trình
trong L3 như là đã tồn tại máy tính sử dụng ngôn ngữ L3 (máy ảo L3). Các chương
trình này sẽ được dịch sang ngôn ngữ L2 và được thực thi bằng một chương trình
dịch L2 tương đương như việc ánh xạ chương trình L2 sang L1.
Việc xây dựng toàn bộ chuỗi các ngôn ngữ, mỗi ngôn ngữ được tạo ra sẽ
thích hợp hơn ngôn ngữ trước đó sẽ có thể tiếp tục cho đến khi nhận được ngôn
ngữ thích hợp nhất. Tuy nhiên, ngôn ngữ càng ở mức cao thì độ linh hoạt và mềm
dẻo càng kém, do người lập trình phụ thuộc nhiều vào tập lệnh của ngôn ngữ sử
dụng. Sơ đồ một máy ảo n cấp có thể biểu diễn như sau:

13
Hình 2.4: Sự phân mức của hệ thống máy tính
Một máy tính số có n cấp có thể xem như có n-1 máy ảo khác nhau, mổi
máy ảo có một ngôn ngữ máy riêng. Các chương trình viết trên các máy ảo này
không thể thực thi trực tiếp mà phải dịch thành các ngôn ngữ máy cấp thấp hơn.
Chỉ có máy thật dùng ngôn ngữ máy L1 mới có thể thực thi trực tiếp bằng các
mạch điện tử. Một lập trình viên sử dụng máy ảo cấp n không cần biết tất cả các
trình dịch này. Chương trình trong máy ảo cấp n sẽ được thực thi bằng cách dịch
thành ngôn ngữ máy cấp thấp hơn và ngôn ngữ máy này sẽ được dịch thành ngôn
ngữ máy thấp hơn nữa hay dịch trực tiếp thành ngôn ngữ máy L1 và thực thi trực
tiếp trên các mạch điện tử.
2.3.2 Sự phân mức của hệ thống máy tính
Hầu hết các máy tính hiện nay gồm có 6 cấp như sau:

Hình 2.5: Sự phân mức của hệ thống máy tính

14
Cấp 0 chính là phần cứng của máy tính. Các mạch điện tử của cấp này sẽ
thực thi các chương trình ngôn ngữ máy của cấp 1. Trong cấp logic số, đối tượng
quan tâm là các cổng logic. Các cổng này được xây dựng từ một nhóm các
transistor. Cấp 1 là cấp ngôn ngữ máy thật sự. Cấp này có một chương trình gọi là
vi chương trình (microprogram), vi chương trình có nhiệm vụ thông dịch các chỉ
thị của cấp 2. Hầu hết các lệnh trong cấp này là di chuyển dữ liệu từ phần này đến
phần khác của máy hay thực hiện việc một số kiểm tra đơn giản.
Mỗi máy cấp 1 có một hay nhiều vi chương trình chạy trên chúng. Mỗi vi
chương trình xác định một ngôn ngữ cấp 2. Các máy cấp 2 đều có nhiều điểm
chung ngay cả các máy cấp 2 của các hãng sản xuất khác nhau. Các lệnh trên máy
cấp 2 được thực thi bằng cách thông dịch bởi vi chương trình mà không phải thực
thi trực tiếp bằng phần cứng.
Cấp thứ 3 thường là cấp hỗn hợp. Hầu hết các lệnh trong ngôn ngữ của cấp
máy này cũng có trong ngôn ngữ cấp 2 và đổng thời có thêm một tập lệnh mới,
một tổ chức bộ nhớ khác và khả năng chạy 2 hay nhiều chương trình song song.
Các lệnh mới thêm vào sẽ được thực thi bằng một trình thông dịch chạy trên cấp 2,
gọi là hệ điều hành. Nhiều lệnh cấp 3 được thực thi trực tiếp do vi chương trình và
một số lệnh khác được thông dịch bằng hệ điều hành (do đó, cấp này là cấp hỗn
hợp).
Cấp 4 thật sự là dạng tượng trưng cho một trong các ngôn ngữ. Cấp này
cung cấp một phương pháp viết chương trình cho các cấp 1, 2, 3 dễ dàng hơn. Các
chương trình viết bằng hợp ngữ được dịch sang các ngôn ngữ của cấp 1, 2, 3 và
sau đó được thông dịch bằng các máy ảo hay thực tương ứng.
Cấp 5 bao gồm các ngôn ngữ được thiết kế cho người lập trình nhằm giải
quyết một vấn đề cụ thể. Các ngôn ngữ này được gọi là cấp cao. Một số ngôn ngữ
cấp cao như Basic, C, Cobol, Fortran, Lisp, Prolog, Pascal và các ngôn ngữ lập
trình hướng đối tượng như C++, J++, … Các chương trình viết bằng các ngôn ngữ
này thường được dịch sang cấp 3 hay 4 bằng các trình biên dịch (compiler).
2.3.3 Lịch sử phát triển của máy tính nhiều cấp

15
Các máy tính đầu tiên trong thập niên 40 chỉ có 2 cấp: cấp máy quy ước và
cấp logic số. Các lập trình viên phải làm việc trên cấp máy quy ước và chương
trình được thực thi trên cấp logic số. Trong thập niên 50, Wikes đề xuất ý tưởng
thiết kế máy tính 3 cấp. Máy tính này có một trình thông dịch cài đặt sẵn, không
thay đổi, có nhiệm vụ thực thi các chương trình trong cấp máy quy ước. Như vậy,
phần cứng chỉ thực thi các vi chương trình với số lệnh giới hạn nên các mạch điện
tử cũng đơn giản hơn.
Trình dịch hợp ngữ (assembler) và các trình biên dịch cho ngôn ngữ cấp cao
(compiler) phát triển vào những năm 50 tạo điều kiện dễ dàng hơn cho lập trình
viên. Tuy nhiên, vào lúc này, lập trình viên phải tự điều hành máy. Vào những năm
60, việc tự động hóa công việc điều hành bắt đầu được thực hiện. Một chương
trình gọi là hệ điều hành (operating system) luôn được lưu trữ bên trong máy tính.
Lập trình viên cung cấp các thẻ điều khiển và chương trình, chúng sẽ được đọc và
thực thi bằng hệ điều hành.
Trong nhiều năm tiếp theo, hệ điều hành càng trở nên phức tạp. Các lệnh,
tiện ích và đặc trưng mới được thêm vào cấp máy quy ước cho đến khi xuất hiện
một cấp mới. Một số lệnh của cấp mới này giống như cấp máy quy ước nhưng một
số lệnh lại hoàn toàn khác, nhất là các lệnh xuất nhập. Vào những năm đầu thập
niên 60, các nghiên cứu ở đại học Dartmouth, MIT đã phát triển các hệ điều hành
cho phép lập trình viên có thể tác động trực tiếp lên máy tính. Trong các hệ thống
này, thiết bị đầu cuối từ xa được nối với máy tính trung tâm qua các đường điện
thoại. Một lập trình viên có thể gõ chương trình và nhận kết quả trả về tức thời ở
bất cứ nơi nào có thiết bị đầu cuối. Các hệ thống này gọi là hệ thống chia sẻ thời
gian (time-sharing system).
2.4 Phần cứng và phần mềm
Các chương trình viết bằng ngôn ngữ máy (cấp 1) được thực thi trực tiếp
bằng các mạch điện tử của máy tính, không có trình thông dịch và biên dịch nào
can thiệp vào. Các mạch điện tử cùng với bộ nhớ và các thành phần xuất / nhập tạo
nên phần cứng máy tính. Phần cứng bao gồm các mạch tích hợp, các board mạch
in, cable, nguồn cung cấp, bộ nhớ, thiết bị đầu cuối,… Phần mềm bao gồm các giải

16
thuật và các biểu diễn của các giải thuật này gọi là chương trình. Nó chính là tập
hợp các lệnh tạo thành một chương trình, chứ không phải là các phương tiện vật lý
lưu trữ chúng. Một dạng trung gian giữa phần mềm và phần cứng gọi là phần dẻo
(firmware). Nó chính là thành phần bao gồm phần mềm được đặt vào bên trong các
mạch điện tử trong quá trình sản xuất. Phần dẻo được dùng khi chương trình không
thay đổi hay hiếm khi phải thay đổi như chương trình điều khiển đặt trong ROM
BIOS. Một thao tác bất kỳ thực thi bằng phần mềm có thể được gắn trực tiếp vào
phần cứng và một lệnh bất kỳ thực thi bằng phần cứng cũng có thể được mô phỏng
bằng phần mềm. Quyết định đặt một số chức năng vào phần mềm và các chức
năng khác vào phần cứng dựa trên các yếu tố giá thành, tốc độ, độ tin cậy. Trên
nhiều máy tính đầu tiên, phần cứng và phần mềm được phân biệt rõ ràng. Phần
cứng thực hiện vài lệnh đơn giản như cộng và nhảy, các thủ tục khác phải do lập
trình viên tự thiết kế. Sau đó, một số thao tác thường xuyên thực thi đòi hỏi các
nhà thiết kế hướng đến yêu cầu xây dựng các mạch điện từ thực thi các thao tác
này. Kết quả là hình thành xu hướng di chuyển các thao tác theo hướng từ cấp cao
xuống cấp thấp hơn. Một số thao tác trước đây được lập trình ở cấp máy quy ước,
sau đó được chuyển xuống thực thi ở phần cứng.
Tuy nhiên, khi xuất hiện thế hệ máy tính dùng vi lập trình và thế hệ máy tính
nhiều cấp, lại xuất hiện xu hướng ngược lại, nghĩa là di chuyển các thao tác từ cấp
thấp lên cấp cao hơn. Ví dụ như lệnh cộng sẽ được thực hiện trực tiếp bằng phần
cứng ở các máy trước kia. Đối với máy tính được vi lập trình hóa, lệnh cộng của
cấp máy quy ước được thông dịch bằng một vi chương trình chạy trên cấp thấp
nhất và được thực thi bằng một chuỗi các bước nhỏ: tìm lệnh, nạp lệnh, xác định
lệnh, định vị dữ liệu, tìm và nạp dữ liệu từ bộ nhớ, thực thi phép cộng và lưu trữ
kết quả.
Một số đặc trưng trước đây được lập trình ở cấp máy quy ước, sau đó được
thực hiện bằng phần cứng hay vi chương trình:
- Các lệnh nhân, chia số nguyên.
- Các lệnh xử lý dấu chấm động.
- Các lệnh gọi thủ tục và quay về từ lệnh gọi thủ tục.

17
- Các lệnh đếm.
- Các lệnh quản lý chuỗi ký tự.
- Các đặc trưng làm tăng tốc độ tính toán chuỗi: định địa chỉ chỉ số và định
địa chỉ gián tiếp.
- Các đặc trưng cho phép chương trình di chuyển trong bộ nhớ sau khi đã
thực thi (cấp phát lại bộ nhớ).
- Các xung clock cho thủ tục định thời.
- Các ngắt báo hiệu cho máy tính.
- Khả năng chuyển đổi quá trình.
Như vậy, ta thấy ranh giới giữa phần cứng và phần mềm là không nhất định
và thường xuyên thay đổi. Theo quan điểm của lập trình viên, cách thức thực thi
một lệnh là không quan trọng, ngoại trừ tốc độ thực thi. Như vậy, phần cứng của
người này có thể là phần mềm của người kia. Từ đó dẫn đến ý tưởng thiết kế máy
tính có cấu trúc (structured computer). Đó là cấu trúc một máy tính thành một
chuỗi các cấp, lập trình viên làm việc trên cấp n không quan tâm đến các cấp khác.

18
Bài 3: BỘ VI XỬ LÝ CỦA INTEL

Có thể nói, lịch sử phát triển của máy tính PC gắn liền với lịch sử phát triển
của các thế hệ bộ vi xử lý. Bộ vi xử lí trong bản mạch chính là thành phần quan
trọng nhất của máy tính của PC. Có hai thuật ngữ dùng để chỉ bộ phận này là: Bộ
vi xử lý (MicroProcessor - MP) hoặc Đơn vị xử lý trung tâm (Central Processing
Unit - CPU). Nó được phát triển trên cơ sở công nghệ chế tạo các mạch vi điện tử
có độ tích hợp rất lớn với các phần tử cơ bản là các transistor trường MOS có độ
tiêu hao công suất rất nhỏ. Trong họ vi xử lý 80x86, chúng thực hiện tất cả các
hoạt động logic và số học. Nói chung, vi xử lí đọc số liệu từ bộ nhớ, xử lí nó theo
cách được xác định bởi lệnh và sau đó ghi kết qủa vào bộ nhớ hoặc thiết bị ngoại
vi.
3.1 Cấu trúc chung của bộ vi xử lý 80286 Intel
Các bộ vi xử lý tiên tiến hiện nay đã đạt đến tốc độ xử lý hàng trăm triệu,
thậm chí hàng tỷ phép tính trong một giây do có mật độ tích hợp vô cùng lớn cộng
với việc áp dụng những giải pháp kỹ thuật nhằm tối ưu hoá hiệu năng tính toán.
Tuy nhiên, cấu trúc chung của các bộ vi xử lý cho đến nay vẫn dựa trên những
nguyên tắc thiết kế cơ bản từ đầu những năm 70 của thế kỷ XX. Intel là hãng đi
đầu trong công nghệ chế tạo bộ vi xử lý và bài này trình bày cấu trúc của bộ vi xử
lý 80286 - bộ vi xử lý được đánh giá là có vai trò đi tiên phong trong việc tiếp cận
với các hệ điều hành đa nhiệm.
Sơ đồ chân tín hiệu của 80286 được thể hiện như hình 3.1. Những đặc trưng
cơ bản của 80286 là:
- Tần số xung nhịp là 16MHz.
- Khả năng địa chỉ hoá được 16MB bộ nhớ vật lý và 1GB nhớ ảo.
- Có hai chế độ hoạt động là chế độ thực và chế độ ảo (chế độ bảo vệ).
- Có khả năng làm việc với bộ đồng xử lý.

19
Hình 3.1: Sơ đồ bố trí chân tín hiệu của 80286
Các tín hiệu của 80286 được phân theo nhóm và được tổ chức thành 3 nhóm
cơ bản:
a. Nhóm tín hiệu địa chỉ:
A0 – A23 là 24 chân tín hiệu địa chỉ dùng để địa chỉ hoá cho các bộ nhớ vật lý
và các cổng vào/ra. Dung lượng bộ nhớ tối đa có thể địa chỉ hoá trực tiếp được là
224 = 16MB. Khi làm việc với các cổng vào/ra thì các chân địa chỉ A16 – A23 được
ghim ở mức logic 0, do đó 80286 có thể quản lý trực tiếp 16K cổng vào/ra.
b. Nhóm tín hiệu dữ liệu:
D0 – D15 là 16bit của kênh dữ liệu 2 chiều, ba trạng thái và có mức tích cực
là logic 1.
c. Nhóm tín hiệu điều khiển và đồng bộ:

20
- CLK là tín hiệu xung đồng bộ cho bộ vi xử lý. Tần số vào CLK sẽ được
chia đôi ở bên trong 80286 và tạo thành đồng hồ ngoại vi PCLK. Mỗi CLK được
gọi là 1 pha của 80286.
- Cap là chân gắn tụ lọc nhiễu. Tụ này có giá trị 0,047μF ± 20% có tác dụng
khử nhiễu xung của nguồn nuôi.
- /BHE là tín hiệu cho phép chọn phần cao của kênh dữ liệu. Tín hiệu này
kết hợp với A0 cho phép cho biết dữ liệu được truyền theo byte hay word:

BHE A0 Chøc n¨ng


0 0 D÷ liÖu--WORD tõ D15-D0
D÷ liÖu--BYTE cao tõ D15-
0 1
D8
1 0 D÷ liÖu--BYTE thÊp tõ D7-D0
1 1 Kh«ng sö dông

- M/IO là tín hiệu dùng để phân biệt bộ nhớ và cổng vào/ra thông tin khi mà
bộ vi xử lý cần quy chiếu chúng, nếu quy chiếu bộ nhớ thì M/IO = 1 còn quy chiếu
cổng vào/ra thì M/IO = 0.
- Các tín hiệu COD/INTA cùng với các tín hiệu M/IO, /S1, /S0 cho phép
phân biệt các chu kỳ máy khác nhau theo bảng sau:

COD/INTA M/Io S S0 Chu kú m¸y cña 80286


1
0 0 0 0 Tr¶ lêi ng¾t
0 0 0 1 Cha sö dông
0 0 1 0 Cha sö dông
0 0 1 1 Kh«ng lµ chu kú m¸y
0 1 0 0 A1=1 dõng A1=0 ®ãng
0 1 0 1 Chu kú m¸y MR
0 1 1 0 Chu kú m¸y MW
0 1 1 1 Khéng lµ chu kú m¸y
1 0 0 0 Cha sö dông
1 0 0 1 Chu kú m¸y IOR
1 0 1 0 Chu kú m¸y IOW
1 0 1 1 Cha sö dông
1 1 0 0 Cha sö dông
1 1 0 1 Chu kú m¸y OF
1 1 1 0 Cha sö dông
1 1 1 1 Kh«ng lµ chu kú m¸y

21
- /READY là tín hiệu sẵn sàng làm việc của thiết bị ngoại vi, đây là tín hiệu
được dùng để hỗ trợ cho hoạt động của CPU khi giao tiếp với thiết bị ngoại vi có
tốc độ chậm.
- INTR là tín hiệu yêu cầu ngắt của ngoại vi, /INTA là tín hiệu trả lời ngắt
của CPU, NMI là tín hiệu ngắt không che được (các tín hiệu này được đề cập chi
tiết trong bài Hoạt động ngắt của máy tính).
- HOLD và HLDA là tín hiệu phục vụ cho chế độ thâm nhập bộ nhớ trực
tiếp DMA (sẽ được đề cập trong bài tổ chức bộ nhớ cho máy tính PC).
- LOCK là tín hiệu cấm các bộ vi xử lý khác (trong chế độ làm việc song
song) dành quyền làm chủ kênh hệ thống. Lệnh LOCK khởi động tín hiệu trên và
nó sẽ trở thành mức tích cực một cách tự động khi thực hiện lệnh XCHG hoặc ở
chu kỳ /INTA hoặc trong thời gian thâm nhập bảng các bộ mô tả.
- PEREQ và /PEACK phục vụ chế độ đối thoại giữa bộ vi xử lý 80286 với
các bộ đồng xử lý ví dụ như bộ đồng xử lý 80287. Tín hiệu PEREQ ở mức logíc 1
là tín hiệu yêu cầu 80286 gửi một toán hạng cho bộ đồng xử lý. Tín hiệu /PEACK
thông báo cho bộ đồng xử lý biết toán hạng mà nó yêu cầu đang được chuyển tới.
- /BUSY và /ERROR là tín hiệu điều khiển cho bộ đồng xử lý. /BUSY
thông báo cho 80286 biết rằng bộ đồng xử lý đang bận. Lúc này bộ vi xử lý 80286
thực hiện các lệnh ESC và WAIT để đợi bộ đồng xử lý. Tín hiệu /ERROR sẽ báo
cho 80286 biết rằng bộ đồng xử lý phát hiện điều kiện ngoại lệ không che được.
- RESET là tín hiệu khởi động có mức tích cực là mức logíc 1. Tín hiệu này
sẽ lập trạng thái ban đầu cho tất cả các thành phần cần thiết của hệ máy tính. Khi
có RESET thì các tín hiệu ra có mức logíc như sau:

Các tín hiệu ra Trạng thái


/S1, /S0, /PEACK, A0-A23 1
/BHE, /LOCK 1
M/IO, CLD/INTA, HLDA 0
D0-D15 Trở kháng cao

22
Hình 3.2 biểu diễn sơ đồ khối chức năng (bên trong) của bộ vi xử lý 8028:

Hình 3.2: Sơ đồ khối cấu trúc của 80286


Bộ vi xử lý 80286 được cấu tạo từ 4 đơn vị có thể làm việc song song (hình
2.2). Đó là các đơn vị: BU (BUS UNIT), IU (INSTRUCTION UNIT), EU
(EXECUTE UNIT) và AU (ADDRESSED UNIT).
Đơn vị BU phát sinh các tín hiệu địa chỉ, dữ liệu và thông tin điều khiển để
thâm nhập vào bộ nhớ hay vào các cổng vào/ra. Nó cho phép thiết lập các quan hệ
với các bộ đồng xử lý hoặc với các bộ xử lý đang làm chủ kênh. Đơn vị này cho
phép quá trình nhận lệnh diễn ra song song với các quá trình khác nhờ có tệp đệm
6 byte. Nó cho phép loại trừ thời gian chết khi nhận lệnh từ bộ nhớ.
Đơn vị lệnh IU nhận lệnh từ tệp đệm, giải mã rồi đưa vào tệp đợi. Tệp đợi
chứa được 3 lệnh.
Đơn vị thực hiện EU sẽ thực hiện lệnh đã được giải mã trong tệp đợi. Nó
liên hệ nới bộ nhớ và cổng vào/ra thông qua đơn vị BU.
Đơn vị địa chỉ AU bảo đảm việc bảo vệ, quản lý bộ nhớ và chuyển địa chỉ
logíc (địa chỉ ảo) thành địa chỉ vật lý (địa chỉ thực) cho đơn vị điều khiển kênh
BU.
Ngoài ra, để hỗ trợ cho các hoạt động của mình, bên trong CPU có một tập
hợp các thanh ghi được chia thành các nhóm theo hình sau:
8086-80286 i386/i486/ Pentium

AX AH AL EAX AH AL
BX BH BL EBX BH BL Các
thanh ghi
23 đa năng
CX CH CL ECX CH CL
DX DH DL EDX DH DL
BP EBP BP
SI ESI SI
DI EDI DI
SP ESP SP

CS CS
Các
DS DS
thanh
SS SS ghi đoạn
ES ES
FS
GS
-Thanh ghi
IP EIP IP con trỏ lệnh
-Thanh ghi cờ
Flag EFlag Flag
Hình 3.3 : Các thanh ghi của họ 80x86
Trong đó:
AX (AH, AL): Thanh ghi tích luỹ BX( BH, BL): Thanh ghi cơ sở
CX (CH, CL): Thanh ghi đếm DX (DH, DL): Thanh ghi số liệu
BP: Thanh ghi con trỏ cơ sở SI: Thanh ghi chỉ số nguồn
DI: thanh ghi chỉ số đích SP: Thanh ghi con trỏ ngăn xếp
CS: Thanh ghi đoạn mã DS: Thanh ghi đoạn số liệu
SS: Thanh ghi đoạn ngăn xếp ES: Thanh ghi đoạn phụ
IP: Thanh ghi con trỏ lệnh F: Thanh ghi cờ.

Có thể liệt kê các nhóm thanh ghi điển hình như sau:
Thanh ghi con trỏ lệnh IP
IP dùng để lưu trữ địa chỉ của lệnh kế tiếp sẽ được chạy trong đoạn chương
trình hiện tại. IP giống như bộ đếm chương trình của các laọi CPU trước. Mỗi lần
một từ lệnh được đọc ra từ bộ nhớ, BIU sẽ thay đổi giá trị của IP sao cho nó đến
địa chỉ của từ lệnh kế tiếp trong bộ nhớ.

Các thanh ghi dữ liệu

24
- Thanh ghi tích lũy AX, thường được sử dụng để tích luỹ các kết quả tính
toán (cộng, trừ, nhân, chia...)
- Thanh ghi cơ sở BX, thường dùng chỉ địa chỉ cơ sở (đáy) của một vùng
nhớ trong bộ nhớ.
- Thanh ghi đếm CX, thường dùng để khai báo số lần một thao tác nào đó
phải được thực hiện trong các vòng lặp, phép dịch, phép quay... giá trị của CX tăng
lên môt với một tác động.
- Thanh ghi số liệu DX, thường dùng để lưu trữ dữ liệu dùng làm thông số
chuyển giao cho một chương trình. DX là thanh ghi duy nhất dùng cho việc truy
nhập các địa chỉ vào/ra trên 255 (FFh).
Các thanh ghi con trỏ và chỉ số
- Thanh ghi con trỏ ngăn xếp SP, chứa địa chỉ đỉnh ngăn xếp, Ngăn xếp là
một vùng nhớ đặc biệt, hoạt động liên quan đến các chỉ thị của CPU. Địa chỉ cũng
như kích thước của nó do chương trình ấn định. SP cho phép truy xuất dễ dàng các
địa chỉ trong đoạn ngăn xếp SS. Giá trị trong SP mô tả phần offset của địa chỉ ngăn
xếp kế tiếp, so với địa chỉ hiện tại đang được lưu trong SS.
- Thanh ghi con trỏ cơ sở BP, cũng có chức năng mô tả offset tính từ SS
nhưng còn được sử dụng để truy nhập dữ liệu bên trong ngăn xếp.
- Các thanh ghi chỉ số (index regiters): được dùng để lưu trữ các địa chỉ
offset đối với những lệnh truy nhập dữ liệu được cất trong thanh ghi đoạn dữ liệu.
Do đó chúng luôn liên quan tới các trị số trong thanh ghi đoạn số liệu DS (data
segment). Chúng bao gồm thanh ghi chỉ số nguồn (source index) và thanh ghi chỉ
số đích (destination index).
Các thanh ghi đoạn
Bộ nhớ PC được chia thành các đoạn lôgic dài 64 kbyte một đoạn như sẽ nói
dưới đây. CPU có thể truy nhập một lần tới bốn đoạn. Địa chỉ của đoạn (địa chỉ cơ
sở - địa chỉ bắt đầu thấp nhất của vùng nhớ) chứa trong các thanh ghi đoạn. Có các
thanh ghi đoạn sau:
- Thanh ghi đoạn mã CS (code segment register), dùng để nhận diện địa chỉ
bắt đầu của đoạn chương trình hiện hành trong bộ nhớ.
25
- Thanh ghi đoạn dữ liệu DS (data segment register), dùng để nhận diện địa
chỉ bắt đầu của đoạn số liệu hiệnhành trong bộ nhớ, nghĩa là nơi chứa các biến của
chương trình.
- Thanh ghi đoạn ngăn xếp SS (stack segment register), chứa địa chỉ lôgic là
địa chỉ bắt đầu của ngăn xếp trong bộ nhớ.
- Thanh ghi đoạn mở rộng ES (extra segment register), thường dùng để lưu
trữ dữ liệu các chuỗi (string).
Thanh ghi cờ
Chỉ có chín trong số 16 bit của thanh ghi này được sử dụng. Mỗi cơ hiệu (là
mỗi bit) có thể được đắt (=1) hay xoá (=0) để chỉ thị kết quả của một thao tác trước
đó hoặc trạng thái hiện tại của bộ xử lí. Tuỳ từng loại cụ thể, họ 80x86 có một số
cờ như sau:
- 6 bit mô tả trạng thái (cờ trạng thái)
+ Cờ nhớ CF (carry): được đặt nếu một thao tác phát ra một tín hiệu carry
hoặc borrow cho toán hạng đích. Thí dụ, khi kết quả của phép lấy tổng hai toán
hạng 8 bit quá 225 (= 28 -1). Cờ này có thể được đặt bởi lệnh STC (set carry), được
xoá bởi lệnh CLC (clear carry) hoặc cộng thêm 1 bởi lệnh CMC (complement
carry).
+ Cờ chẵn lẻ PF (parity): được đặt nếu kết quả của một phép toán có chứa số
bit được đặt (=1).
+ Cờ mang phụ AF (auxiliary carry): được dùng cho mã BCD và được đặt
nếu thao tác phát ra mộ tín hiệu carry hoặc borrow cho 4 bit thấp của toán hạng.
+ Cờ zê - rô ZF (zero): được đặt nếu kết quả của phép toán bằng không (=0)
+ Cờ đấu SF (sign): đấu tương ứng với bit nhiều ý nghĩa nhất của kết quả
phép toán được đặt (0 = kết quả đương, 1 = kết quả âm).
+ Cờ tràn OF (overflow): được đặt nếu kết quả của phép toán quá lớn hoặc
quá nhỏ cho toán hạng đích.
- 3 bit cờ điều khiển:

26
+ Cờ báo hướng DF (direction): xác định hướng của phép toán xử lí chuỗi.
Nếu hướng được đặt, chuỗi sẽ được xử lí từ địa chỉ cao tới địa chỉ thấp và ngược
lại. Cờ này có thể được đặt bởi lệnh STD và được xoá bởi lệnh CLD.
+ Cờ ngắt IF (interrup enable): nếu được đặt, CPU sẽ chấp nhận một yêu cầu
ngắt cứng IRQs và phục vụ ngắt. Cờ này có thể được đặt bởi lệnh STI và được xoá
bởi lệnh CLI.
+ Cờ bước TF (trap): nếu được đặt, CPU sẽ phát ra ngắt số 1 sau mỗi bước
chương trình dùng cho việc gỡ rối (debug). Trong trường hợp này, chương trình
được chạy từng bước một. Cờ này có thể không được đặt hay xoá trực tiếp bởi lệnh
máy mà phải dùng với sự phụ trợ của ngăn xếp.
3.2 Hoạt động của bộ vi xử lý 80286
Một phương án kết nối bộ vi xử lý 80286 trong máy tính PC được chỉ ra ở
hình 3.3. Ta sẽ mô tả 2 hoạt động điển hình của nó là hoạt động đọc/ghi thông tin
và hoạt động quản lý bộ nhớ.
Address Buffer

CLK
Clock
74LS244

Multiplexer

82284
74LS158
Address

Synchr
CLK
READY
Data Buffer
74LS245

74LS245
Memory
Buffer

CPU Main
Memory
Bus Controller

80286
Controller
82288

Memory

27
Asynchronous READY
Hình 3.3: Sơ đồ ghép nối CPU với các vi mạch bổ trợ

Ghi chú:
82284: vi mạch phát xung nhịp đồng hồ 8284 Address Buffer: đệm địa chỉ

asynchronous READY: tín hiệu READY không Data Buffer: đệm số liệu:
đồng bộ Ports: các cổng
Sychr, READY: tín hiệu READY đồng bộ Bus Controller: bộ điều khiển
bus
3.2.1 Hoạt động đọc/ghi thông tin:
Chu kỳ máy đọc thông tin có thể chia làm 6 pha: A, B, C, D, E, F.
Tại pha A (φ2 của Tc thuộc chu kỳ trước) bộ vi xử lý 80286 đưa ra kênh tín
hiệu địa chỉ A23- A0 và các tín hiệu M/IO, COD/INTA để thông báo là chu kỳ
máy quy chiếu bộ nhớ hay quy chiếu cổng vào/ra.
Tại pha B (φ1 của Ts thuộc chu kỳ đọc) tín hiệu /S1/S0= 01 chỉ ra mã của
chu kỳ máy đọc. ở pha này tín hiệu /BHE cũng có hiệu lực, nếu sử dụng 8 bít cao
của kênh dữ liệu D15-D8.
Pha C (φ2 của Ts thuộc chu kỳ đọc) sẽ đưa tín hiệu ALE ra để chốt các tín
hiệu địa chỉ vào mạch 74533 (74373).
Tại pha D (φ1 của Tc thuộc chu kỳ đọc) các tín hiệu /MRDC và DT/R được
đưa về mức tích cực âm. Tín hiệu DEN được đưa về mức tích cực để chọn các
mạch truyền dữ liệu. Các tín hiệu trạng thái /S0/S1 chuẩn bị cho chu kỳ tiếp theo.
Tại pha E (φ2 của Tc thuộc chu kỳ đọc) các tín hiệu M/IO và COD/INTA
được thiết lập cho chu kỳ máy tiếp theo. Nếu chu kỳ mới là chu kỳ trả lời ngắt hay
chu kỳ treo kênh thì các tín hiệu này ở phần trạng thái trở kháng cao.
Cuối pha E, bộ vi xử lý 80286 kiểm tra tín hiệu /READY. Nếu /READY= 0
thì chu kỳ máy đọc thông tin sẽ kết thúc. Dữ liệu đã sẵn sàng trên kênh dữ liệu và
bộ vi xử lý 80286 đọc dữ liệu này. Nếu /READY= 1, bộ vi xử lý 80286 đưa ra một
trạng thái Tc nữa và cứ như thế đến khi /READY= 0.

28
Tại pha F (φ1 của Ts của chu kỳ tiếp theo) chu kỳ đọc kết thúc, các tín hiệu
DEN, /MRDC, DT/R trở về trạng thái không tích cực. Mạch 82284 đưa tín hiệu
/READY về mức cao.
Chu kỳ ghi thông tin của 80286 bao gồm các pha A, B, C, D, E, F và G.
Tại pha A (φ2 của Tc của chu kỳ trước) bộ vi xử lý 80286 đưa ra kênh địa
chỉ A23-A0, các tín hiệu M/IO và COD/INTA. Quá trình giải mã địa chỉ có thể bắt
đầu.
Tại pha B (φ1 của Ts thuộc chu kỳ đang thực hiện) các tín hiệu /S1/S0= 00
chỉ ra rằng chu kỳ máy ghi thông tin đang được thực hiện. Tín hiệu sẽ có giá trị 0
hay 1 tuỳ theo các đường dữ liệu là 8 bít cao hay không.
Tại pha C (φ2 của Ts thuộc chu kỳ đang thực hiện) bộ vi xử lý 80286 truyền
dữ liệu ra kênh. Tín hiệu ALE chốt địa chỉ còn DEN chọn các mạch truyền dữ liệu.
Vì dữ liệu đi từ kênh cục bộ sang kênh hệ thống nên tín hiệu DT/R= 1.
Tại pha D (φ1 của Tc thuộc chu kỳ đang thực hiện), 80286 đưa các tín
hiệu /S1/S0 về logíc 1, ALE về lôgíc 0 còn tín hiệu /MWTE có hiệu lực.
Tại pha E (φ2 của Tc thuộc chu kỳ đang thực hiện) các tín hiệu địa chỉ,
M/IO và COD/INTA của chu kỳ tiếp theo được đưa ra giải mã. Như vậy, chu kỳ
máy mới đang được tiến hành ngay khi chu kỳ máy cũ còn đang thực hiện để hoàn
tất lệnh. Cuối pha E tín hiệu /READY được trích mẫu, nếu /READY= 0, chu kỳ
ghi thông tin sẽ kết thúc, ngược lại thì một trạng thái Tc sẽ lại bắt đầu và cứ tiếp
tục cho đến khi /READY= 0.
Tại pha F (φ1 của Ts thuộc chu kỳ tiếp theo) các tín hiệu /MWTC và
/READY được đưa về mức không tích cực.
Tại pha G (φ2 của Ts thuộc chu kỳ tiếp theo) dữ liệu được đưa vào bộ nhớ,
tín hiệu DEN trở về mức thụ động và do đó kênh dữ liệu được giải phóng.
3.2.2 Hoạt động quản lý bộ nhớ thực:
Không gian nhớ trong chế độ địa chỉ thực là không gian nhớ mà bộ vi xử lý
có thể quản lý trực tiếp bằng giá trị con trỏ do cặp thanh ghi mảng và thanh ghi
OFFSET quy định (SEG : OFFSET). Không gian nhớ cực đại sẽ phụ thuộc vào số
bit của kênh địa chỉ mà bộ vi xử lý dành cho chế độ này. Thí dụ, bộ vi xử lý 80286

29
sử dụng 20 bit địa chỉ A19-A0 dành cho chế độ địa chỉ thực thì không gian nhớ
cực đại sẽ bằng 220 byte tức bằng 1MB. Nếu hệ vi xử lý có IC nhớ (ROM, RAM)
nằm ra ngoài không gian này thì bộ vi xử lý 80286 không thể quản lý được.
Trong quá trình hoạt động, khối quản lý bộ nhớ của bộ vi xử lý 80286 cho
phép chuyển các giá trị con trỏ do cặp thanh ghi mảng và thanh ghi OFFSET thành
những địa chỉ thực và đưa ra kênh hệ thống để kích hoạt các đối tượng tương ứng
như bộ nhớ trung tâm hay các cổng vào/ra.

Hình 3.4: Cơ chế tính địa chỉ vật lý từ địa chỉ logic
Để chuyển địa chỉ logic (SEG:OFFSET) 32 bit bên trong thành địa chỉ vật lý
20 bit (A19 – A0) trên kênh địa chỉ, AU sẽ thực hiện dịch trái SEG đi 4 bit rồi cộng
với giá trị của OFFSET.
Trong chế độ thực, bộ vi xử lý 80286 có 6 phương pháp địa chỉ hoá:
♦ Địa chỉ trực tiếp cho phép thâm nhập trực tiếp vào toán hạng có địa chỉ là giá trị của
SEG:OFFSET.
♦ Địa chỉ gián tiếp cho phép thâm nhập trực tiếp vào toán hạng có địa chỉ là giá trị của
SEG:(SI hoặc DI hoặc BX).
♦ Địa chỉ tương đối cho bởi giá trị của OFFSET cho phép thâm nhập vào toán hạng có
địa chỉ là giá trị của tổng giá trị dịch chuyển chứa trong lệnh và nội dung của các thanh ghi cơ sở
BX và BP.OFFSET= (BX hay BP) + Dịch chuyển.

30
♦ Địa chỉ hoá theo chỉ số cho bởi OFFSET cho phép thâm nhập vào toán hạng có địa
chỉ là giá trị của tổng giá trị dịch chuuyển chứa trong lệnh và nội dung của thanh ghi SI hay DI.
OFFSET= (SI hay DI) + Dịch chuyển
♦ Địa chỉ tương đối theo chỉ số cho bởi OFFSET cho phép thâm nhập vào toán hạng có
địa chỉ là giá trị của tổng nội dung thanh ghi cơ sở và nội dung thanh ghi chỉ số.
OFFSET= (BX hay BP) + (SI hay DI)
Khi ta có một vùng dữ liệu động và muốn làm việc với các phần tử của vùng thì chế độ
địa chỉ này là thích hợp. Thanh ghi cơ sở phục vụ chọn vùng, còn thanh ghi chỉ số trỏ đến bên
trong của vùng xác định.
♦ Địa chỉ tương đối theo chỉ số và giá trị dịch chuyển cho bởi OFFSET cho phép thâm
nhập đến toán hạng có địa chỉ là giá trị là tổng nội duing của thanh ghi cơ sở, nội dung của thanh
ghi chỉ số và giá trị dịch chuyển chứa trong lệnh.
OFFSET= (BX hay BP) + (SI hay DI) + dịch chuyển
Nhờ có thanh ghi cơ sở, chế độ địa chỉ này cho phép lặp lại một cấu trúc mà ở trong đó
có các vùng dữ liệu cần tìm. Chỉ số cho phép chọn phần tử xác định bên trong vùng dữ liệu này.
3.2.3 Hoạt động quản lý bộ nhớ ảo:
Không gian nhớ trong chế độ địa chỉ ảo là không gian nhớ mà bộ vi xử lý có
thể quản lý vượt dung lượng không gian nhớ thực rất nhiều. Khả năng này có được
là do tổ chức phần cứng bên trong của bộ vi xử lý được cài cấy một cơ cấu đặc biệt
đó là phần ẩn của các thanh ghi quản lý.

Hình 3.5: Mô tả mảng nhớ trong chế độ ảo

31
Khối quản lý bộ nhớ của bộ vi xử lý 80286 cho phép chuyển các giá trị địa
chỉ ảo (hay còn gọi là địa chỉ lôgíc) thành những địa chỉ thực cho bộ nhớ trung
tâm.
Nguyên tắc cơ bản của chế độ địa chỉ ảo là phương thức tạo mảng nhớ. Một
mảng nhớ được định nghĩa như là một tập hợp các ngăn nhớ liên tiếp có dung
lượng không quá 64 KB và mảng này có thể trao đổi giữa bộ nhớ trung tâm và bộ
nhớ ngoài.
Mỗi mảng nhớ được xác định từ ba tham số: địa chỉ cơ sở, kích thước mảng
dung lượng của mảng nhớ) và đặc quyền thâm nhập. Mỗi mảng nhớ có cấu trúc
như được biểu diễn trên hình 3.5.
Nhiệm vụ trong phương thức quản lý địa chỉ ảo được hiểu là việc thực hiện
một tập hợp các tiến trình gắn với một trạng thái xác định của bộ vi xử lý.
Không gian nhớ luôn luôn gắn với nhiệm vụ. Không gian nhớ được dành
riêng cho một nhiệm vụ gọi là không gian nhớ cục bộ. Không gian nhớ mà tất cả
các nhiệm vụ đều có thể thâm nhập tới gọi là không gian nhớ toàn cục.

Hình 3.6: Tổ chức không gian nhớ dành cho các nhiệm vụ
Một địa chỉ trong chương trình chạy trên vi xử lý 80286 gồm có hai thành
phần: bộ chọn mảng 16 bít và OFFSET 16 bít. 32 bít địa chỉ này có ý nghĩa khác
nhau khi 80286 làm việc ở chế độ thực và chế độ bảo vệ. Trong chế độ thực, bộ
chọn mảng biểu diễn các bít cao của địa chỉ cơ sở của mảng nhớ. Trong chế độ bảo
vệ bộ chọn mảng có ý nghĩa như sau: hai bít thấp dùng để thể hiện mức đặc quyền
32
của các yêu cầu RPL (Reqested Privelege level); bít TI (Table Indicator) được sử
dụng để xác định không gian nhớ. Nếu TI= 0, không gian nhớ là không gian toàn
cục còn nếu TI= 1 thì không gian nhớ là không gian cục bộ. Mười ba bít cao của
bộ chọn mảng dành cho chỉ số nên nó xác định được 213= 8192 mảng nhớ trong
không gian nhớ toàn cục và 8192 mảng nhớ trong không gian nhớ cục bộ. Như vậy
bộ chọn mảng địa chỉ hoá được cho 16384 mảng nhớ khác nhau.
Dung lượng lớn nhất của một mảng nhớ là 64 KB nên không gian nhớ ảo
dành cho một nhiệm vụ có dung lượng cực đại là 214.216= 230= 1GB. Lưu ý là dung
lượng bộ nhớ ở chế độ thực chỉ là 24.216= 220= 1MB.

Hình 3.7: Con trỏ địa chỉ ảo

Chỉ số giữ vai trò con trỏ đến bảng các bộ mô tả. Bảng này thiết lập quan hệ
giữa 32 bít địa chỉ ảo và 24 bít địa chỉ thực của bộ vi xử lý. Bộ vi xử lý quản lý hai
loại bảng các bộ mô tả là GDT (Global Descriptor table) tức là bảng các bộ mô tả
không gian nhớ toàn cục và bảng các bộ mô tả không gian nhớ cục bộ LDT (Local
Deseriptor table). Các bộ mô tả của 80286 bao gồm: bộ mô tả mảng dữ liệu, bộ mô
tả mảng lệnh, bộ mô tả mảng hệ thống và bộ mô tả mảng các cổng giao tiếp.

33
Bộ mô tả mảng dữ liệu được sử dụng để quy chiếu tới mảng dữ liệu và
mảng STACK. Tám byte của bộ mô tả chứa các thông tin về mảng: địa chỉ cơ sở,
dung lượng (độ dài) của mảng, một byte đặc quyền thâm nhập vào mảng. Lưu ý
rằng hai byte đầu dành cho các bộ vi xử lý cấp cao của hãng Intel (80386, 80486,
80586 ...), do đó khi khởi động phải nạp giá trị 0 vào cho chúng.
D1
D0
5

Dµnh cho c¸c bé VXL cao cÊp (ph¶i n¹p 0000h


khi khëi ®éng)
P DPL 1 0 Ed §Þa chØ c¬ së A23-
W A A16
§Þa chØ c¬ së A15-A0

Dung l­îng L15-L0

Hình 3.8: Bộ mô tả mảng dữ liệu


Byte chứa giá trị quyền thâm nhập có các bít sau:
Bít P (Present)= 1 nếu mảng dữ liệu mà bộ mô tả quy chiếu tới đã được nạp
trong bộ nhớ, còn nếu chưa thì bit P= 0. Khi chương trình thâm nhập vào mảng dữ
liệu chưa có trong bộ nhớ sẽ gây ra ngoại lệ 11 hay 12. Chương trình xử lý ngoại lệ
này sẽ nạp mảng dữ liệu cần thiết vào bộ nhớ từ thiết bị ngoại vi (từ ổ đĩa).
Bít DPL (Descriptor Privilege Level) cho biết mức đặc quyền cuả mảng dữ
liệu mà bộ mô tả quy chiếu.
Bít E (Executable)= 0 thông báo rằng bộ mô tả là bộ mô tả mảng dữ liệu.
Bít ED (Expansion Direction) chỉ ra chiều tiến triển của mảng dữ liệu. Nếu
ED= 1 thì mảng dữ liệu sẽ thuộc loại STACK. Địa chỉ bắt đầu của mảng sẽ là tổng
của địa chỉ cơ sở và độ dài cực đại của mảng, tức là nó phát triển từ vùng địa chỉ
cao nhất tới địa chỉ thấp nhất. Nếu ED= 0 thì chiều phát triển của mảng sẽ đi từ địa
chỉ thấp nhất tăng dần tới địa chỉ giới hạn.
Bít W (Writable)= 1 thì mảng dữ liệu có thể vừa đọc vừa ghi ra được RW
(Read - Write). Nếu W= 0 thì mảng dữ liệu được bảo vệ, tức là cấm ghi, chỉ đọc
được thôi, do đó nó có ký hiệu là RO (Read - Only).

34
Bít A (Accesed)= 1 nếu mảng nhớ mà bộ mô tả đã được sử dụng. Một khi A
đã được lập thì chỉ có thể xoá nó bằng chương trình. Bít Accesed giúp cho việc
thống kê tần xuất thâm nhập vào mảng dữ liệu của một chương trình.
Bộ mô tả mảng lệnh dùng để quy chiếu tới mảng nhớ chứa chương trình.
Bộ mô tả lệnh có cấu trúc tương tự như bộ mô tả mảng dữ liệu, riêng byte quyền
thâm nhập có một số bít thay đổi.

D1
D0
5

Dµnh cho c¸c bé VXL cao cÊp (ph¶i n¹p 0000h


khi khëi ®éng)
P DPL 1 1 C §Þa chØ c¬ së A23-
R A A16
§Þa chØ c¬ së A15-A0

Dung l­îng L15-L0

Hình 3.9: Bộ mô tả mảng mã lệnh


Nếu P= 1 có nghĩa là bộ mô tả quy chiếu tới mảng lệnh.
Nếu R= 0 thì chương trình chứa trong mảng lệnh chỉ có chức năng thực hiện
và được ký hiệu là EO (Executable Only) còn nếu R= 1 thì chương trình chứa
trong mảng lệnh không những thực hiện được mà còn đọc được nên nó có ký hiệu
là ER (Executable and Read).
Nếu C= 0 thì chương trình con được gọi sẽ thực hiện với đặc quyền bằng
DPL trong bộ mô tả của mảng chứa chương trình con. Nếu C= 1 thì chương trình
con được gọi sẽ thực hiện với đặc quyền bằng DPL trong bộ mô tả quy chiếu mảng
chứa chương trình con đó.
Bộ mô tả mảng hệ thống dùng để quy chiếu tới các mảng chứa thông tin
cần cho hệ thống.
D1
D0
5

Dµnh cho c¸c bé VXL cao cÊp (ph¶i n¹p 0000h


khi khëi ®éng)
P DPL 0 0 0 §Þa chØ c¬ së A23-
KiÓu A16
§Þa
35chØ c¬ së A15-A0

Dung l­îng L15-L0


Hình 3.10: Bộ mô tả mảng hệ thống
Nếu kiểu = 1, thì bộ mô tả quy chiếu tới mảng chứa trạng thái của nhiệm vụ
TSS (Task State Segment). Nhiệm vụ này không ở trạng thái thực hiện. Nếu kiểu =
3, bộ mô tả quy chiếu mảng TSS của một nhiệm vụ đang hoạt động. Nếu kiểu = 2,
bộ mô tả quy chiếu mảng chứa bảng các bộ mô tả cục bộ.
Thông tin trong bảng các bộ mô tả bao gồm thông tin trong GDT và
LDT.Trong GDT chứa các bộ mô tả mảng tương ứng vói tất cả các mảng nhớ
trong không gian nhớ toàn cục, còn trong LDT chứa các bộ mô tả mảng nhớ trong
không gian nhớ cục bộ của một nhiệm vụ.
Mỗi bảng các bộ mô tả cũng chính là một mảng nhớ được định nghĩa bằng
một bộ mô tả mảng đặc biệt, thuộc nhóm bộ mô tả mảng hệ thống.
GDT là một bảng duy nhất nên không cần xác định trước bằng một bộ mô tả
riêng. Địa chỉ và kích thước của mảng GDT được chứa trong một thanh ghi đặc
biệt, gọi là thanh ghi bảng các bộ mô tả toàn cục GDTR (Global Descriptor Table
register).
Bộ mô tả các cổng giao tiếp có dạng như hình 3.11. Các lệnh CALL và
JMP chỉ có thể thâm nhập vào mảng lệnh có mức đặc quyền cao hơn thông qua
một cổng nối ghép gọi là cổng giao tiếp. Có tất cả bốn loại cổng giao tiếp: cổng
kiểu gọi (CALL GATE); cổng kiểu bẫy (TRAP GATE); cổng theo nhiệm vụ
(TASK GATE).
D1
D0
5

Dµnh cho c¸c bé VXL cao cÊp (ph¶i n¹p 0000h


khi khëi ®éng)
P DPL 0 0 1
X X X Sè tõ (WC)
KiÓu
Bé chän X X

OFFSET (kh«ng dïng kiÓu 01, 11)

Hình 3.11: Bộ mô tả mảng giao tiếp

36
Cơ chế thâm nhập vào một mảng nhớ trong chế độ địa chỉ ảo thông qua các
bộ mô tả mảng nhìn chung được mô tả như sau:

RAM RAM RAM

Dù tr÷
M¶n
Dù tr÷ AR A23- g
A16 Nhí
AR A23-
LDTR A16 cho
A15-A0
Mét
A15-A0
Bé chän L15-L0 nhiÖ
L15-L0
m vô

GDT
LDT

Hình 3.12: Cơ chế truy cập vào một mảng nhớ trong chế độ địa chỉ ảo
Từ cơ chế truy cập nêu trên, ta dễ dàng chỉ ra phương pháp tính địa chỉ thực
từ địa chỉ ảo như sau:
Bé chän
OFFSET RAM
TI

Bé D÷
m« liÖu

m¶ng
ChØ §Þa chØ c¬
sè B¶ng së
c¸c Bé
m« t¶

Hình 3.13: Cách tính địa chỉ thực từ địa chỉ ảo


Địa chỉ ảo của 80286 có 32 bít bao gồm 16 bít của bộ chọn và 16 bít
OFFSET. Bộ chọn có ba thành phần: chỉ số, TI, và RPL. TI cho biết bộ mô tả
thuộc GDT hay LDT. Vì mỗi bộ mô tả mảng có 8 byte nên địa chỉ của bộ mô tả
trong bảng sẽ là địa chỉ cơ sở cộng với chỉ số nhân 8 lần. 80286 sẽ tìm thấy trong
bộ mô tả địa chỉ cơ sở của mảng nhớ thực và giới hạn của nó. Cộng 24 bít địa chỉ
cơ sở với 16 bít OFFSET trong địa chỉ ảo sẽ cho 24 bít địa chỉ thực của mảng nhớ.
Quản lý bộ nhớ ảo được thực hiện nhờ có các thanh ghi quản lý bộ nhớ đặc
biệt. Các thanh ghi mảng CS, DS, ES, SS có hai phần: phần hở là bộ chọn 16 bít,
37
phần kín 48 bít bao gồm: một byte thể hiện đặc quyền thâm nhập, ba byte địa chỉ
cơ sở của mảng và hai byte kích thước mảng.
Bộ chọn 16 bít được nạp giá trị bằng các lệnh LDS, LES, MOV. Các lệnh
này làm thay đổi nội dung của SS, DS và ES. Các lệnh CALL và JMP làm thay đổi
nội dung của CS.
Trong khi thực hiện các lệnh này, bộ chọn của địa chỉ logíc được nạp vào
phần cao của các thanh ghi. 80286 sử dụng bộ chọn (chỉ số TI) để thâm nhập vào
bộ mô tả 48 bít và nó được tự động sao sang phần kín của thanh ghi mảng. Quá
trình này được thể hiện qua hình 2.24.
Như vậy, thông qua thanh ghi mảng, bộ vi xử lý 80286 biết tất cả các tính
chất của mảng nhớ đang sử dụng. 80286 dùng nội dung của thanh ghi này cùng 16
bít OFFSET của địa chỉ lôgíc thâm nhập vào bên trong mảng, tránh được những
tìm kiếm trong các bảng ở bộ nhớ.
Thanh ghi GDTR chứa địa chỉ cơ sở và giới hạn của mảng GDT. Bộ vi xử lý
sử dụng các lệnh LGDT (Load) và SGDT (Store) để nạp hoặc cất giữ nội dung của
nó.
Vấn đề cần quan tâm cuối cùng là khởi động (RESET) bộ vi xử lý, sau khi
khởi động, các trạng thái của bộ vi xử lý được xác lập như sau:
 Tín hiệu INTR bị che.
 Bộ vi xử lý 80286 ở chế độ thực, không làm việc với bộ đồng xử lý (PE=
0, EM= 0, MP= 0).
 Bảng các véc tơ ngắt xác định ở địa chỉ 000000.
 DS, ES, SS được khởi động để cho phép thâm nhập vào 64 KB đầu của
bộ nhớ.
 Tổ hợp CS:IP là địa chỉ bắt đầu của chương trình sau RESET:
F0000h
0FFF0h
FFFF0h
 Vùng nhớ chứa chương trình khởi động của hệ thống là 64 KB cuối cùng

của không gian nhớ.


38
Bảng mô tả giá trị các thanh ghi khi khởi động bộ vi xử lý
Các Thanh Ghi Giá trị (HEX)
F 0002
MSW FFF0
IP FFF0
Bộ chọn CS F000
Bộ chọn DS 0000
Bộ chọn SS 0000
Bộ chọn ES 0000
Địa chỉ cơ sở của CS FF0000
Địa chỉ cơ sở của DS 000000
Địa chỉ cơ sở của SS 000000
Địa chỉ cơ sở của ES 000000
Giới hạn của CS FFFF
Giới hạn của DS FFFF
Giới hạn của SS FFFF
Giới hạn của ES FFFF
Hình 3.14: Bố trí bộ nhớ sau khi RESET

Ch­¬ng tr×nh
IP=FFF0h
64 Kb cuèi khëi ®éng ph¶i
CS=F000 cïng chøa ë ®©y
h
Kh«n
g
gian
nhí B¶ng vector ng¾t
1 Mb chøa ë ®©y

64 Kb ®Çu
DS,SS,ES,I tiªn
DT

39
Bài 4: TỔ CHỨC HỆ THỐNG BUS

Để tạo ra khả năng liên lạc, trao đổi thông tin giữa các thành phần bên trong
và bên ngoài bảng mạch chính (Main Board), máy tính được trang bị hệ thống Bus
bao gồm:
Bus địa chỉ (Address Bus): là bus một chiều hướng từ bộ vi xử lý ra các thiết
bị. Bộ vi xử lý sử dụng kênh này để quản lý các thành phần bằng cách gán cho mỗi
thành phần một địa chỉ xác định.
Bus dữ liệu (Data Bus): là bus hai chiều dùng để trao đổi thông tin giữa bộ
vi xử lý và các thành phần có trong hệ.
Bus điều khiển (Control Bus): là tập hợp các đường dây tín hiệu điều khiển
để giám sát và đồng bộ toàn bộ hoạt động của hệ thống.
4.1 Chức năng và thông số của BUS
Một trong những hoạt động và chức năng cơ bản của máy tính là truyền số
liệu. Sự hoạt động của máy tính do các bộ vi xử lý điều khiển, bộ vi xử lý và các
chip hỗ trợ khác thường xuyên phải truyền số liệu giữa các khối, bộ phận trong và
ngoài chúng với nhau.
Vì có rất nhiều các bộ phận, khối riêng rẽ trong bản thân các Chip cũng như
số lượng và chủng loại các thiết bị rất phong phú nên các dạng truyền dữ liệu cũng
có thể được phân ra thành truyền dữ liệu giữa các thành phần trong cùng một chip,
giữa các chip với nhau và giữa các chip với các thiết bị khác.

40
Hình 4.1 : Các bus trong một hệ thống máy tính.
register On chip bus

System bus

CPU
Memory I/O I/O
ALU Board Board

Local bus

Coprocessor

Các bộ phận, khối được kết nối lên hệ thống bus phải thoả mãn một yêu cầu
là có khả năng được huỷ bỏ hoặc kết nối trở lại theo lệnh điều khiển. Quy tắc
nghiêm ngặt của truyền số liệu là tại mỗi thời điểm, tối đa chỉ có một luồng dữ liệu
được chiếm dụng bus.
4.2 BUS trong máy vi tính
4.2.1 Bus trong vi xử lý và bus bộ xử lý
Trong các bộ vi xử lý có một hệ thống các bus dùng để truyền số liệu, lệnh,
các tín hiệu điều khiển,...giữa các khối bên trong của nó. Ngoài ra có một hệ thống
các bus đưa ra ngoài qua các chân của nó. Các đường bus trong được điều khiển
bởi khối điều khiển tuỳ thuộc hoặc vào nội dung lệnh đuợc giải mã hoặc theo các
điều khiển ngắt của bên ngoài đưa vào vi xử lý. Các đường bus này hoạt động theo
nhịp của một clock bên trong vi xử lý.
Bus bộ vi xử lý là đường truyền dẫn giữa CPU và các chip hỗ trợ trung gian.
Những chip hỗ trợ này được gọi là bộ chip (chip set). Bus này dùng để truyền dữ
liệu giữa CPU và bus hệ thống chính hoặc giữa CPU và cache ngoài.
Vì mục đích của bus bộ xử lý để gửi hoặc nhận thông tin từ CPU với tốc độ
nhanh nhất có thể, nên bus này hoạt động nhanh hơn nhiều so với bất kỳ bus nào

41
khác trong hệ thống và đảm bảo tránh hiện tượng tắc nghẽn ở đây. Bus bộ xử lý
bao gồm bus dữ liệu, bus địa chỉ và bus điều khiển. Trong một hệ thống thiết kế
cho vi xử lý Pentium, bus bộ xử lý có 64 đường dữ liệu, 32 đường địa chỉ. Pentium
Pro và Pentium II có 36 đường địa chỉ. Bus bộ xử lý hoạt động ở tốc độ đồng hồ cơ
sở giống như CPU chạy ngoại trú. Ví dụ Pentium II 333MHz chạy ở tốc độ đồng
hồ 333MHz nội trú nhưng chỉ ở 66,6 MHz ngoại trú. Tốc độ truyền của bus bộ xử
lý được xác định bằng cách nhân độ rộng dữ liệu với tốc độ đồng hồ cơ sở rồi chia
cho 8.
Khi thiết kế các bộ vi xử lý, có thể tuỳ ý lựa chọn loại bus bên trong vi xử
lý, còn với các bus liên hệ với bên ngoài cần phải xác định rõ các quy tắc làm việc
cũng như các đặc điểm kỹ thuật về điện và cơ khí để người thiết kế bảng mạch
chính (Main Board) có thể ghép nối vi xử lý với các thiết bị khác. Nói cách khác,
các bus này phải tuân theo một chuẩn nhất định. Tập các quy tắc của chuẩn còn
được gọi là giao thức bus.
Trong thế giới máy tính có rất nhiều loại bus khác nhau được sử dụng, các
bus này nói chung là không tương thích với nhau. Sau đây là một số loại bus được
dùng phổ biến:
Tên bus Lĩnh vực áp dụng
- Camac Vật lý hạt nhân
- EISA Một sô hệ thống dùng bộ VXL 8036
- IBM PC, PC/AT Máy tính IBM PC, IBM/PC/AT
- Massbus Máy PDP - 1 và VAX
- Microchannel Máy PS/2
- Multibus I Một số hệ thống có VXL 8088, 8086
- Multibus II Một số hệ thống có VXL 80386
- Versabus Một số hệ thống dùng VXL Motorola
- VME Một số hệ thống dùng VXL 68x0 của Motorola.
Người ta thường phân loại bus theo ba cách sau:
1. Theo tổ chức phần cứng (như các loại bus nêu trên)
2. Theo nghi thức truyền thông (bus đồng bộ và không đồng bộ).

42
3. Theo loại tín hiệu truyền trên bus (bus địa chỉ, bus dữ liệu ...)
Hoạt động của các bus
Thường có nhiều thiết bị nối với bus, một số là thiết bị tích cực và có thể đòi
hỏi truyền thông tin trên bus, trong khi đó lại có các thiết bị thụ động chờ các yêu
cầu từ các thiết bị khác. Các thiết bị tích cực được gọi là chủ bus (master), còn các
thiết bị thụ động là tớ (slave).
Khi CPU ra lệnh cho bộ điều khiển đĩa đọc/ ghi một khối dữ liệu thì CPU là
master cò bộ điều khiển đĩa là slave. Tuy nhiên khi bộ điều khiển đĩa ra lệnh cho
bộ nhớ nhận dữ liệu mà nó đọc từ đĩa thì nó lại giữ vai trò của master.
Bus Driver và Bus Receiver
Tín hiệu điện mà các thiết bị trong máy tính phát ra thường không đủ mạnh
để điều khiển được bus, nhất là khi bus khá dài và có nhiều thiết bị nối với nó.
Chính vì vậy mà hầu hết các bus master được nối với bus thông qua một chip được
gọi là bus driver, về căn bản đó là bộ khuyếch đại tín hiệu số. Tương tự như vậy,
hầu hết các slave bus được nối với bus thông qua bus receiver. Đối với các thiết bị
có thể khi thì đóng vai trò master, khi thì đóng vai trò slave, người ta sử dụng một
chip kết hợp, gọi là transceiver. Các chip này đóng vai trò ghép nối và thường là
các thiết bị 3 trạng thái, cho phép có thể ở trạng thái thứ ba: hở mạch (còn gọi là
thả nổi).
Giống như MPU (Micro Processor Unit), bus có các đường địa chỉ, đường
số liệu và đường điều khiển. Tuy nhiên không nhất thiết phải có ánh xạ một - một
giữa các tín hiệu ở các chân ra của MPU và các đường dây của bus.
Những vấn đề quan trọng nhất liên quan đến thiết kế bus là: Nhịp đồng hồ bus (sự
phân chia thời gian, hay còn gọi là bus clocking), cơ chế trọng tài bus (bus
arbitration), xử lý ngắt và xử lý lỗi.
Các bus có thể được chia theo giao thức truyền thông tin thành hai loại riêng
biệt là bus đồng bộ và bus không đồng bộ phụ thuộc vào việc sử dụng nhịp đồng
hồ bus.

4.2.2 Bus đồng bộ

43
Bus đồng bộ (Synchronous bus) có một đường dây điều khiển bởi một bộ
dao động thạch anh, tín hiệu trên đường dây này có dạng sóng vuông, với tần số
thường nằm trong khoảng 5MHz - 50 MHz. Mọi hoạt động bus xảy ra trong một
số nguyên lần chu kỳ này và được gọi là chu kỳ bus.
Giản đồ thời gian của một bus đồng bộ với tần số đồng hồ là 4MHz, như vậy
chu kỳ bus là 250nS.
- T1 bắt đầu bằng sườn lên của tín hiệu đồng hồ Φ , trong một phần thời
gian của T1, MPU đặt địa chỉ của byte cần đọc lên bus địa chỉ. Sau khi tín hiệu địa
chỉ được thiết lập giá trị mới, MPU đặt các tín hiệu MREQ và RD tích cực. Tín

hiệu MREQ (memory request, truy cập bộ nhớ) chứ không phải thiết bị I/O; còn tín
hiệu RD (Read) chọn Read.
- T2 là thời gian cần thiết để bộ nhớ giải mã địa chỉ và đưa dữ liệu lên bus
dữ liệu.
- T3 tại sườn xung xuống của T3, MPU nhận dữ liệu trên bus dữ liệu, chứa
vào thanh ghi bên trong MPU và chốt dữ liệu. Sau đó MPU đảo các tín hiệu MREQ
và RD .
Như vậy đã kết thúc một thao tác đọc, tại chu kỳ máy tiếp theo MPU có thể
thực hiện một thao tác khác.
- TAD : theo giản đồ thời gian, TAD ≤ 110ns, đây là thông số do nhà sản xuất
đảm bảo, MPU sẽ đưa ra tín hiệu địa chỉ không chậm hươn 110ns tính từ thời điểm
giữa sườn lên của T1.
- TDS : Giá trị nhỏ nhất là 50ns, thông số này cho phép dữ liệu được đưa ra
ổn định trên bus dữ liệu ít nhất là 50ns trước thời điểm giữa sườn xuống của T3.
Yêu cầu về thời gian này đảm bảo cho MPU đọc dữ liệu liệu tin cậy.
Khoảng thời gian bắt buộc đối với TAD và TDS cũng nói lên rằng, trong
trường hợp xấu nhất, bộ nhớ chỉ có 250 + 250+ 125 - 110 - 50 = 465ns tính từ thời
điểm có tín hiệu địa chỉ cho tới khi nó đưa dữ liệu ra bus địa chỉ. Nếu bộ nhớ
không đáp ứng đủ nhanh, nó cần phải phát tín hiệu xin chờ WAIT trước sườn xuống

44
của T2. Thao tác này đưa thêm vào một trạng thái chờ (wait state), khi bộ nhớ đã
đưa ra dữ liệu ổn định, nó sẽ đảo tín hiệu WAIT thành WAIT.
- TML: Đảm bảo rằng tín hiệu địa chỉ sẽ được thiết lập trước tín hiệu MREQ

ít nhất là 60ns. Khoảng thời gian này là quan trọng nếu tín hiệu MREQ điều khiển
sự tạo ra tín hiệu chọn chip CS, bởi vì một số chip nhớ đòi hỏi phải nhận được tín
hiệu địa chỉ trước tín hiệu chọn chip. Như vậy không thể chọn chip nhớ với thời
gian thiết lập là 75ns.
- TM, TRL: Các giá trị bắt buộc đối với 2 đại lượng này có ý nghĩa là cả hai
tín hiệu MREQ và RD sẽ là tích cực trong khoảng thời gian 85ns tính từ thừi điểm
xuống của xung đồng hồ T1. Trong trường hợp xấu nhất, chip nhớ chỉ có 250 +
250 - 85- 50 = 365ns sau khi hai tín hiệu trên là tích cực để đưa dữ liệu ra bus. Sự
bắt buộc về thời gian này bổ sung thêm sự bắt buộc thời gian với tín hiệu đồng hồ.
- TMH, TRH: Hai đại lượng này cho biết cần có bao nhiêu thời gian để các tín
hiệu MREQ và RD sẽ được đảo sau khi dữ liệu đã được MPU đọc vào.
- TDH: Cho biết bộ nhớ cần phải lưu dữ liệu bao lâu trên bus sau khi tín hiệu
RD đã đảo.
Truyền tải khối dữ liệu.
Ngoài các chu kỳ đọc/ ghi, một số bus đồng bộ còn hỗ trợ truyền dữ liệu
theo khối. Khi một thao tác đọc/ ghi bắt đầu, bus master báo cho slave biết có bao
nhiêu byte cần truyền đi, sau đó slave sẽ liên tục đưa ra mỗi chu kỳ một byte, cho
đến khi đủ số byte được thông báo. Như vậy, khi đọc dữ liệu theo khối, n byte dữ
liệu cần n+2 chu kỳ, thay cho 3n chu kỳ như trước.
Cách khác làm cho bus truyền dữ liệu nhanh hơn là làm cho các chu kỳ ngắn
lại. Trong ví dụ trên, mỗi byte được truyền đi trong 750ns, vậy bus có dải thông là
1.33MBs. Nếu xung đồng hồ là 8MHz, thời gian một chu kỳ chỉ còn một nửa, giải
thông sẽ là 2.67MBs.
Tuy vậy việc giảm chu kỳ bus dẫn đến các khó khăn về mặt kỹ thuật, các bit
tín hiệu truyền trên các đường dây khác nhau trong bus không phải luôn có cùng
vận tốc, dẫn đến một hiệu ứng, gọi là bus skew.

45
Khi nghiên cứu về bus cần phải quan tâm đến vấn đề tín hiệu tích cực nên là
mức thấp hay mức cao. Điều này tuỳ thuộc vào người thiết kế bus xác định mức
nào là thuận lợi hơn.

Ký hiệu Tham số Min Max


TAD Thời gian trễ của tín hiệu địa chỉ 110
TML Thời gian địa chỉ ổn định trước tín hiệu MREQ 60
TM Thời gian trễ của MREQ so với sườn xuống của 85
tín hiệu đồng hồ T1
TRL Thời gian trễ của RD so với sườn xuống của tín 85
hiệu đồng hồ T1
TDS Thời gian thiết lập dữ liệu trước sườn xuống của 50
tín hiệu đồng hồ T3
TMH Thời gian trễ của MREQ so với sườn xuống của 85
tín hiệu đồng hồ T3
TRH Thời gian trễ của RD so với sườn xuống của tín 85
hiệu đồng hồ T3
TDH Thời gian lưu trữ dữ liệu từ lúc đảo tín hiệu RD 0

Giá trị của một số thông số thời gian


4.2.3 Bus không đồng bộ
Bus không đồng bộ (asynchronous bus) không sử dụng một xung đồng hồ
định nhịp. Chu kỳ của nó có thể kéo dài tuỳ ý và có thể khác nhau đối với các cặp
thiết bị trao đổi tin khác nhau.
Làm việc với bus đồng bộ dễ dàng hơn do nó được định thời một cách gián
đoạn, tuy vậy chính đặc điểm này cũng dẫn đến nhược điểm. Thứ nhất là: mọi
công việc được tiến hành trong những khoảng thời gian là bội số nhịp đồng hồ bus,
nếu một thao tác nào đó của CPU hay bộ nhớ có thể hoàn thành trong 3,2 chu kỳ
thì nó sẽ phải kéo dài thành 4 chu kỳ. Điều hạn chế lớn nữa là đã chọn chu kỳ bus
và đã xây dựng bộ nhớ, I/O Card cho bus này thì khó có thể tận dụng được được
những tiến bộ của công nghệ. Chẳng hạn sau khi đã xây dựng bus với sự định thời
như trên, công nghệ mới đưa ra các chip CPU và chip nhớ có thời gian chu kỳ là

46
100ns (thay cho 250ns như cũ), chúng vẫn cứ phải chạy với tốc độ thấp như các
CPU và chip nhớ loại cũ, bởi vì nghi thức bus đòi hỏi chip nhớ phải đưa ra dữ liệu
và ổn định dữ liệu ngay trước thời điểm ứng với sườn xuống của T3. Nếu có nhiều
thiết bị khác nhau nối với một bus, trong đó có một số thiết bị có thể hoạt động
nhanh hơn các thiết bị khác thì cần phải đặt bus hoạt động phù hợp với thiết bị
chậm nhất.
Bus không đồng bộ ra đời nhằm khắc phục các nhược điểm của bus đồng bộ.
Hình 5.3 minh hoạ sự hoạt động của bus không đồng bộ, trong đó master yêu cầu
đọc bộ nhớ.
Trước hết master cần phát ra địa chỉ nhớ mà nó muốn truy cập, sau đó phát
tín hiệu MREQ tích cực để báo rằng nó muốn truy cập bộ nhớ chứ không phải cổng
I/O. Tín hiệu này là cần thiết vì bộ nhớ và các cổng I/O đều có thể dùng chung một
miền địa chỉ. Tiếp theo master phải phát tín hiệu RD tích cực để bên slave biết
rằng master sẽ thực hiện thao tác đọc chứ không phải là thao tác ghi.
Các tín hiệu MREQ và RD được đưa ra sau tín hiệu định địa chỉ bao lâu tuỳ
thuộc vào tốc độ của master. Sau khi hai tín hiệu này đã ổn định, master sẽ phát tín
hiệu đặc biệt, là MSYN (Master SYNchronization) ở mức tích cực để báo cho slave
biết rằng các tín hiệu cần thiết đã sẵn sàng trên bus, slave có thể nhận lấy. Khi
slave nhận các tín hiệu này, nó sẽ thực hiện công việc với tốc độ nhanh nhất có thể
được (nhanh chóng đưa dữ liệu của ô nhớ yêu cầu lên bus dữ liệu). Khi hoàn
thành, slave sẽ phát tín hiệu SSYN (Slave SYNchronization) tích cực.
Khi master nhận được tín hiệu SSYN tích cực, nó biết rằng dữ liệu của slave
đã sẵn sàng và thực hiện việc chốt dữ liệu, sau đó đảo các đường địa chỉ cũng như
các tín hiệu MREQ và RD và MSYN .
Khi slave nhận được sự đảo tín hiệu MSYN thành không tích cực, nó biết
rằng một chu kỳ đã kết thúc và đảo tín hiệu SSYN . Bây giờ bus lại trở lại trạng
thái ban đầu, mọi tín hiệu đều là không tích cực, tất cả sẵn sàng chờ bus master
mới.

47
Trên giản đồ thời gian của bus không đồng bộ, ta sử dụng mũi tên để thể
hiện nguyên nhân và kết quả. Việc đưa MSYN lên mức tích cực dẫn đến việc
truyền dữ liệu ra bus dữ liệu và đồng thời cũng dẫn đến việc slave phát ra tín hiệu
SSYN tích cực. Đến lượt mình, tín hiệu SSYN lại gây ra sự đảo mức của các đường

địa chỉ, MREQ và RD và MSYN . Cuối cùng sự đảo mức của MSYN lại gây ra sự
đảo mức tín hiệu SSYN và kết thúc một chu kỳ đọc.
Full handshake
Tập các tín hiệu phối hợp với nhau như vậy được gọi là Full handshake, nó
chủ yếu gồm có 4 sự kiện sau:
1. MSYN được đặt lên mức tích cực.
2. SSYN được đặt tích cực để đáp lại tín hiệu MSYN
3. MSYN được đảo để đáp lại tín hiệu SSYN
4. SSYN được đảo để đáp lại tín hiệu MSYN thành không tích cực.
Ta có thể nhận thấy Full handshake là quan hệ nhân quả, độc lập với thời
gian. Nếu một cặp master-slave nào đó hoạt động chậm hoặc thời gian bị kéo dài
thì cặp master-slave kế tiếp không hề bị ảnh hưởng.
Tuy ưu điểm của bus không đồng bộ rất rõ ràng, nhưng trong thực tế phần
lớn các bus đang được sử dụng là loại bus đồng bộ. Lý do căn bản là các hệ thống
sử dụng bus đồng bộ là dễ thiết kế hơn. CPU chỉ cần chuyển các mức tín hiệu cần
thiết sang trạng thái tích cực là các chip nhớ đáp ứng ngay, không cần tín hiệu
phản hồi. Chỉ cần các chip được chọn phù hợp thì mọi hoạt động đều trôi chảy.
4.3 Trọng tài bus
Trong hệ thống máy tính không phải chỉ có CPU làm bus master, thực tế các
chip I/O cũng có lúc phải làm chủ bus để có thể đọc hoặc ghi vào bộ nhớ và để gọi
ngắt; các bộ đồng xử lý cũng có thể làm chủ bus. Như vậy cần phải giải quyết vấn
đề tranh chấp khi có từ hai thiết bị trở lên đồng thời muốn làm chủ bus. Để giải
quyết vấn đề này cần có một cơ chế trọng tài để tránh sự xung đột. Cơ chế trọng tài
có thể là tập trung hoặc không tập trung.
4.3.1 Trọng tài bus tập trung

48
Hình 5.4 là một ví dụ đơn giản về trọng tài bus tập trung. ở đây, một trọng
tài bus duy nhất sẽ quyết định thiết bị nào được là chủ bus tiếp theo. Nhiều bộ
VXL có đơn vị trọng tài bus được thiết kế ngay trong chip VXL, trong một số máy
tính mini, đơn vị trọng tài bus nằm ngoài CPU.
Theo cơ chế này, trọng tài chỉ có thể biết là có yêu cầu chiếm dụng bus hay
không, chứ không biết có bao nhiêu đơn vị muốn chiếm bus. Khi trọng tài bus
nhận được một yêu cầu, nó sẽ phát ra một tín hiệu cho phép trên đường dây bus
grant (cho dùng bus). Đường dây này nối qua tất cả các thiết bị vào/ ra theo kiểu
nối tiếp.
Khi thiết bị nằm gần trọng tài nhất nhận được tín hiệu cho phép, nó sẽ kiểm
tra xem có phải chính nó đã phát yêu cầu chiếm bus không? Nếu đúng thì nó sẽ
chiếm lấy bus và không truyền tiếp tín hiêuh cho phép trên đường dây. Nếu nó
kiểm tra thấy không phải là yêu cầu của mình thì tiếp tục truyền tín hiệu cho phép
tới thiết bị kế tiếp trên đường dây.
Một số loại bus có nhiều mức độ ưu tiên, với mỗi mức ưu tiên có một đường
dây yêu cầu bus và một đường dây cho chiếm bus. Hình 5.5 là một ví dụ về bus có
hai mức (các bus trong thực tế thường có 4, 8 hay 16 mức). Mỗi thiết bị trong hệ
thống máy tính nối với một trong các mức yêu cầu bus, các thiết bị thường được sử
dụng hơn được gắn với đường dây có mức ưu tiên cao hơn.

bus request
Bus
arbittrtion

Device 2
Device 1 Device 3 Device 4

Hình 4.2: Trọng tài bus tập trung có một mức, mắc nối tiếp.

49
Nếu có một số thiết bị ở các mức ưu tiên khác nhau cùng yêu cầu, trọng tài
bus sẽ chỉ phát tín hiệu cho phép đối với yêu cầu có mức ưu tiên cao nhất. Trong
số các thiết bị có cùng mức ưu tiên, thiết bị gần trọng tài bus hơn sẽ có quyền ưu
tiên cao hơn.

bus request
Bus
arbittrtion

Device 2
Device 1
Device 3 Device 4

Hình 4.3: Trọng tài bus tập trung có hai mức, mắc nối tiếp.
Một số trọng tài bus có đường dây thứ ba nối tới các thiết bị để các thiết bị
xác nhận việc nhận được tín hiệu cho phép và chiếm dụng bus, gọi là đường dây
biên nhận acknowledgement (ACK). Ngay sau khi một thiết bị phát tín hiệu tích
cực trên đường dây ACK, trọng tài bus có thể đảo tín hiệu trên các đường dây trên
các đường dây yêu cầu bus và cho phép dùng bus thành mức không tích cực. Kết
quả là các thiết bị khác có thể đòi hỏi chiếm dụng bus trong khi thiết bị đầu tiên
đang dùng bus. Khi kết thúc phiên làm việc hiện thời, bus master kế tiếp sẽ được
lựa chọn. Cách làm việc như vậy làm tăng hiệu quả sử dụng bus, nhưng cần thêm
một đường truyền tín hiệu ACK và cấu trúc của các thiết bị cũng phức tạp hơn.
Các chip của Motorola sử dụng các bus loại này.
4.3.2 Trọng tài bus không tập trung
Trong cơ chế trọng tài bus không tập trung, không cần sử dụng một đơn vị
riêng làm trọng tài bus, nhờ vậy giảm được giá thành phần cứng. Trong một số loại
máy tính khác nhau, người ta đã sử dụng một vài kiểu trọng tài bus theo cơ chế
này.
Trọng tài bus không tập trong trong multibus

50
Trong Multibus, người ta cho phép có thể lựa chọn cơ chế trọng tài bus tập
trung hoặc không tập trung, cơ chế trọng tài bus không tập trung được thực hiện
theo sơ đồ trên hình 3.4. Người ta chỉ sử dụng 3 đường dây, không phụ thuộc vào
số lượng thiết bị nối với bus. Bao gồm:
+ Yêu cầu chiếm dụng bus (bus request)
+ Trạng thái bus (bus busy), được bus master đặt ở mức tích cực
+ Trọng tài bus, được mắc nối tiếp qua các thiết bị

bus request
bus busy
bus
arbitration

I O
I O
Device 2 I O I O
Device 1
Device 3 Device 4

Hình 4.4: Trọng tài bus không tập trung trong Multibus.
Khi không có thiết bị nào yêu cầu chiếm bus, đường dây trọng tài bus truyền
mức tích cực tới tất cả các thiết bị. Khi một đơn vị nào đó muốn chiếm dụng bus,
đầu tiên nó kiểm tra bus có rỗi không và kiểm tra đầu vào của đường trọng tài bus,
nếu thấy có điện áp IN = 5V thì nó có thể xin bus bằng cách đưa tín hiệu yêu cầu
bus (Request) và xoá tín hiệu OUT, tức là đặt OUT = 0V. Do đó các thiết bị ưu
tiên thấp hơn sẽ không xin được bus. Lúc này nó trở thành bus master.
4.4 Xử lý ngắt
Một chức năng quan trọng của bus là xử lý ngắt. Khi CPU ra lệnh cho một
thiết bị trong máy tính thực hiện việc đọc, ghi hay xử lý tin, nó thường chờ đợi tín
hiệu ngắt do thiết bị I/O phát ra khi hoàn thành công việc được CPU yêu cầu. Khi
nhận được tín hiệu ngắt, CPU đáp ứng ngay, đó có thể là việc nhận dữ liệu do thiết
bị I/O chuyển về, cũng có thể là việc tiếp tục gửi dữ liệu tới thiết bị I/O hoặc CPU
sử dụng bus cho một thao tác khác ... . Như vậy chính ngắt phát ra tín hiệu yêu cầu
bus.

51
Vì có thể có nhiều thiết bị ngoại vi cùng phát tín hiệu ngắt, cho nên cũng cần
có một cơ chế trọng tài giống như đối với các bus thông thường. Giải pháp thường
dùng là gán các mức độ ưu tiên cho các thiết bị và sử dụng một trọng tài tập trung
để trao quyền ưu tiên cho các thiết bị và sử dụng một trongh tài tập trung để trao
quyền ưu tiên cho các thiết bị quan trọng thường xuyên được sử dụng.
4.5 Một số bus thông dụng
4.5.1 Bus IBM PC
Đây là ví dụ điển hình về một loại bus được sử dụng trong các hệ thống
thương mại, nó được sử dụng rộng rãi trong các hệ thống vi xử lý dựa trên chip
8088. Hầu hết họ PC, kể cả các máy tương thích đều sử dụng bus này. Chính bus
IBM PC tạo nên cơ sở cho bus IBM PC/AT và nhiều loại bus khác.
Tín hiệu Số dây In Out giải thích
OSC 1 x Chân dao động (14,31818 MHz)
CLK 1 x Xung đồng hồ (4,77 MHHz)
RESET 1 x Tín hiệu reset CPU và các thiết bị I/O
A0 – A19 20 x Các đường dây địa chỉ
D0 – D7 8 x Các đường truyền dữ liệu
ALE 1 x Chốt địa chỉ
(MEMR) 1 x Đọc bộ nhớ
(MEMW) 1 x Ghi vào bộ nhớ
(IOR) 1 x Đọc cổng I/O
(IOW) 1 x Ghi ra cổng I/O
AEN 1 x Adress ENable, yêu cầu bus địa chỉ
(IOCHCHK) 1 x I/O Chanel Check
IOCHRDY 1 x I/O Chanel Ready
IRQ2 - IRQ7 6 x Các đường yêu cầu ngắt
DRQ1 - DRQ3 3 x DMA Request
DACK0 – DACK3 4 x DMA Acknowleage
T/C 1 x Terminal/Count
Power 5
GND 3
Reserved 1

Các thông số của hệ thống BUS IBM PC


Bus này có 62 đường dây, trong đó có 20 đường địa chỉ, 8 đường số liệu và
các đường tín hiệu khác...được liệt kê trong bảng 3.2.

52
Về mặt vật lý, bus IBM PC được thiết kế ngay trên board mạch chính và có
khoảng gần chục đầu nối dạng khe cắm (slot) để cắm các card mở rộng, trên mỗi
khe cắm có 62 chân được chia thành hai hàng.
Tín hiệu đồng hồ OSC và CLK
Các máy IBM PC đầu tiên sử dụng các phần tử dao động thạch anh, ở tần số
14,31818 MHz, tần số này được chọn phải thoả mãn việc tạo ra tín hiệu đồng bộ
màu hệ NTSC. Tần số này cao hơn so với chuẩn 8088 (tần số cực đại là 5 MHz),
do đó nó được chia ba thành 4,77MHz. Tần số 4,77 MHz được dùng làm đồng hồ
chính để xác định chu kỳ bus. Tín hiệu tần số 4,77 MHz cũng có trên bus IBM PC
và ký hiệu là CLK. Tín hiệu này không cân xứng như tín hiệu đông hồ 14,31818
MHz mà trong một chu kỳ bao gồm 2/3 thời gian ở mức thấp và 1/3 thời gian ở
mức cao.
Tín hiệu RESET
Tín hiệu RESET trên bus do chip 8284A tạo ra. Để RESET CPU, các mạch
điện bên ngoài gửi tín hiệu tới 8284A, nó sẽ đặt tín hiệu reset lên mức tchs cực,
buộc CPU và các thiết bị I/O khở tạo lại.
Các đường địa chỉ và dữ liệu
CPU không nối trực tiếp với các đường địa chỉ và đương số liệu của bus, mà
thông qua các chip khác. Các đường địa chỉ được chốt bằng cách dùng 3 chip
74LS373, mỗi chip là một bộ 8 thanh ghi chốt, tuy nhiên chỉ sử dụng 20 trong số
24 đường có thể.
Các đường dữ liệu sẽ được lấy mẫu (đọc nhanh giá trị) hoặc cung cấp giá trị
trong những thời gian xác định, như trong sườn dương của một tín hiệu đồng hồ
nào đó, vì vậy không cần chốt. Các đường dữ liệu của bus được điều khiển bởi bus
transceiver (chip 74LS245). Chân DIR xác định hướng của tín hiệu là đi đến hay đi
ra từ CPU.
Lý do chính của việc nối các chân của MPU với bên ngoài thông qua các bộ
đệm chính là vì nó được chế tạo theo công nghệ MOS, CPU không có khả năng
cung cấp đủ dòng để điều khiển tất cả các phần tử nối với bus. Các chip làm bộ

53
đệm dùng công nghệ TTL có khả năng cung cấp đủ dòng cho cả các thiết bị nối
với bus.
Ngoài ra còn lý do khác là, khi có một thiết bị nào đó khác CPU muốn trở
thành bus master (như DMAC), CPU cần phải thả nổi các bus. Phương pháp đơn
giản nhất được áp dụng là thiết bị đó phải phát tín hiệu AEN (Address ENable) để
đảo tín hiệu cho phép đưa ra trên các thanh ghi chốt và transceiver, làm cho các
bus được thả nổi.
Tín hiệu ALE (Address Latch Enable)
Tín hiệu ALE được đặt mức tích cực khi CPU đang điều khiển các đường tín
hiệu địa chỉ, cho phép các chip 74LS373 biết khi nào cần chốt địa chỉ lại. Tín hiệu
này của bus cũng cho bộ nhớ và các chip I/O biết khi nào các tín hiệu trên bus địa
chỉ là hợp lệ.
Các đường tín hiệu MEMR , MEMW , IOR , IOW
Để điều khiển việc đọc/ ghi vào bộ nhớ hoặc các thiết bị vào/ra. Nhờ các tín
hiệu này, bus cung cấp hai thông gian địa chỉ riêng biệt, một cho MEM và một cho
I/O. Bộ nhớ sẽ không phản ứng khi thấy tín hiệu IOR , IOW ở mức tích cực.
CPU sử dụng các tín hiệu S0 - S2 đưa vào chip điều khiển bus 8288 để tạo

ra các tín hiệu MEMR , MEMW , IOR , IOW cùng với tín hiệu ALE. Chip điều
khiển bus cũng nhận tín hiệu điều khiển ANE từ bus, tín hiệu này do một thiết bị
muốn trở thành bus master đưa ra, khi nhận được tín hiệu ANE, chip điều khiển
bus sẽ phát tín hiệu điều khiển các chip chốt địa chỉ nà chip bus transceiver thả nổi
bus.
Tín hiệu IOCHCHK (I/O CHanel CHeck)
Tín hiệu này sẽ tích cực khi có lỗi chẵn /lẻ bị phát hiện trên bus. Tín hiệu
này sẽ tác động mmọt ngắt NMI.
Tín hiệu IOCHRDY (I/O CHanel ReaDY)
Tín hiệu này do bộ nhớ đưa ra khi tốc độ hoạt động của nó thấp, yêu cầu
CPU cho thêm một số chu kỳ để đợi, bằng cách chèn wait states vào các chu kỳ
đọc/ghi bộ nhớ.

54
Các tín hiệu IRQ2-IRQ7.
Là các tín hiệu do các thiết bị ngoại vi đưa ra, đưa đến chip điều khiển ngắt
8259A. Khi có tín hiệu gửi đến chip điều khiển ngắt, nó sẽ kiểm soát các tín hiệu
này và đưa ra một tín hiệu yêu cầu ngắt tới CPU và đặt số hiệu vectơ ngắt lên
đường dữ liệu khi CPU cần đến. IRQ0 thường được mạch đồng hồ và IRQ1 được
bàn phím sử dụng.
Các tín hiệu liên quan đến DMA
Các tín hiệu còn lại nói chung liên quan đến hoạt động DMA, chẳng hạn khi
CPU yêu cầu ổ đĩa đọc một khối dữ liệu, mạch điều khiển ổ đĩa sẽ chờ nhận được
byte đầu tiên từ ổ đĩa đưa ra, sau đó phát ra một yêu cầu trở thành bus master để
ghi byte đó vào bộ nhớ.
Chip 8237A được INTEL thiết kế nhằm quản lý các nghi thức bus và thực
hiện DMA trong đó có việc taưng địa chỉ bộ nhớ và giảm con đếm sau khi truyền
mỗi byte. Việc này nó thực hiện thay cho các thiết bị I/O, giúp giảm giá thành của
chúng.
Về căn bản, chip 8237A là một CPU nhỏ, có các chương trình được ghi sẵn
bên trong. Khi 8088 muốn bắt đầu hoạt động DMA đối với một thiết bị ngoại vi
nào đó, nó nạp số hiệu vào thiết bị, địa chỉ ô nhớ, số byte, hướng truyền và các
thông tin khác vào các thanh ghi bên trong 8237A. Khi chip điều khiển đã sẵn sàng
đọc hoặc ghi byte đầu tiên, nó đặt mức tích cực lên một trong các đường DRQ của
bus để đưa vào chip 8237A. Khi nhận được tín hiệu, 8237A đòi chiếm bus và sẵn
sàng truyền một byte. Chip 8237A phát tín hiệu DACK tới chip điều khiển báo cho
nó biết hãy ghi hoặc đọc byte của mình (trong thao tác đọc hoặc ghi tương ứng).
Trong khoảng một chu kỳ này, chip 8237A điều khiển hoạt động của bus như một
bus master.
Chip 8237A có 4 kênh độc lập và có thể quản lý đồng thời 4 đường truyền,
cấu trúc và hoạt động của nó sẽ được trình bày chi tiết trong bài sau.
Tín hiệu T/C (Terminal/Count)

55
Đường T/C được chip 8237A đặt mức tích cực khi bộ đếm byte (byte count)
bàng 0, báo cho bộ điều khiển I/O biết rằng công việc yêu cầu đã hoàn tất, đã đến
lúc báo hiệu cho 8258A gọi ngắt tới CPU.
4.5.2 Bus IBM PC/AT
Bus IBM PC/AT là bước phát triển tiếp theo của thế hệ bus IBM PC nhằm
phát huy được những khả năng hơn hẳn của bộ VXL 80286 so với 8088 trước nó.
Với bus địa chỉ 24 dây, có khả năng đánh địa chỉ cho 224 = 16MB bộ nhớ và có bus
dữ liệu 16 bit.
Với giải pháp mở rộng PC bus, bổ sung thêm vào các khe cắm cũ một đoạn
khe cắm ngắn, trên đó có 36 dây tín hiệu, tăng thêm cho bus địa chỉ 4 dây, bus dữ
liệu 8 dây, các đường yêu cầu ngắt, kênh DMA, ... . Nhờ vậy các card mở rộng
trước đây vẫn dùng cho IBM PC có thể dùng cho IBM PC/AT.
Ngoài việc mở rộng bus, tần số tín hiệu đồng hồ bus cũng được tăng từ 4,77
MHz ở PC bus thành 8MHz, nhờ đó tốc độ truyền thông trên bus cũng tăng lên
nhiều.
Năm 1991 tổ chức IEEE (Institute of Electrical and Electronic Engineers) đã
đưa ra tiêu chuẩn quốc tế cho bus của máy AT, gọi là bus ISA (Industrial Standard
Architecture)
Các nhà sản xuất PC khác đã đưa ra một chuẩn khác, đó là bus EISA
(Extended ISA), về căn bản bus này là sự mở rộng bus PC/AT thành 32 bit, giữ
nguyên tính tương thích với các máy tính và các card mở rộng đã có.
Ở thế hệ PS/2, thế hệ sau của IBM PC/AT một bus hoàn toàn mới được áp
dụng, bus Micro chanel.
4.5.3 Bus PCI
Vào đầu năm 1992, Intel đã thành lập nhóm công nghệ mới. Nhằm nghiên
cứu cải thiện các đặc tính kỹ thuật và những hạn chế của các bus hiện có như: bus
ISA, bus EISA.
PCI (Peripheral Component Interconnect, liên kết các thành phần ngoại vi).
Định chuẩn bus PCI đã được đưa ra vào tháng 6 năm 1992 và được cập nhật vào

56
tháng 4 năm 1993, đã thiết kế lại bus PC truyền thống bằng cách bổ sung thêm một
bus khác vào giữa CPU và bus I/O.
Bus PCI thường được gọi là bus mezzanine vì nó bổ sung thêm một tầng
khác vào cấu hình bus truyền thống. PCI bỏ qua bus I/O tiêu chuẩn, nó sử dụng bus
hệ thống để tăng tốc độ đồng hồ bus lên và khai thác hết lợi thế của đường dẫn dữ
liệu của CPU.
Thông tin được truyền qua bus PCI ở 33MHz và độ rộng dữ liệu đầy đủ của
CPU. Khi bus ấy được sử dụng để nối với CPU 32 bit, dải thông là 132 MBit/s,
được tính theo công thức: 33MHz*32bit/8 = 132MBit/s. Khi bus ấy được sử dụng
với những hệ thống bổ sung 64 bit, dải thông tăng gấp đôi, nghĩa là tốc đọ truyền
dữ liệu đạt tới 264MBs. Lý do chíng mà bus PCI đã tăng tốc độ nhanh hơn các bus
khác là nó có thể hoạt động đồng thời với bus vi xử lý. CPU có thể được xử lý dữ
liệu trong các cache ngoại trú, trong khi bus PCI phải truyền thông tin liên tục giữa
các thành phần khác của hệ thống, đây là ưu điểm thiết kế chính của bus PCI.
Định chuẩn PCI có ba cấu hình, mỗi cấu hình được thiết kế cho một kiểu hệ
thống riêng biệt với những quy định nguồn riêng. Định chuẩn 5V cho những hệ
thống máy tính văn phòng, định chuẩn 3,3V cho các hệ thống máy tính xách tay và
những định chuẩn chung cho những board mẹ và các cạc hoạt động trong hai kiểu
ấy.

57
Bài 5: TỔ CHỨC BỘ NHỚ MÁY TÍNH VÀ CƠ CHẾ DMA

Một trong các hoạt động cơ bản của máy tính là lưu trữ dữ liệu dạng nhị
phân. Các dữ liệu này là các chương trình hoặc số liệu mà Vi xử lý đưa ra hoặc đọc
vào tuỳ theo yêu cầu. Bộ nhớ là các thiết bị để thực hiện nhiệm vụ lưu trữ dữ liệu
của máy vi tính. Mỗi ô nhớ được xác định bởi một địa chỉ, thông thường mỗi ô nhớ
có dung lượng là 1 byte, các byte được ghép thành từ. Những máy tính 16 bit số
liệu thì tổ chức 2 byte/từ, còn các máy 32 bit số liệu thì độ dài từ gấp đôi (4
byte/từ). Mass Memory
HDD, FDD, Tape, CD ROM
5.1 Kiến trúc tổng thể của bộ nhớ
Xét một cách tổng thể, bộ nhớ của máy tính có kiến trúc phân cấp
I/O
(hierarchy) trải dài từ bộ nhớ ngoàiProcessor
đến bộ nhớ trong và cuối cùng là đến bộ nhớ
đệm (cache) trong và ngoài CPU.
Main Memory
RAM
58

Internal Cache External cache


Hình 5.1: Kiến trúc tổng thể của bộ nhớ
Bộ nhớ trong có thể chia làm hai loại đó là ROM và RAM. ROM (Read-
only Memory) là bộ nhớ chỉ đọc và RAM(Random-Access Memory) là bộ nhớ
truy xuất ngẫu nhiên. Nói chung, ROM chứa các dữ liệu một cách cố định và
không thể thay đổi, trong khi đó RAM có thể đọc ra và có thể ghi vào.
Khái niệm truy xuất ngẫu nhiên có nghĩa là bất kỳ một vị trí nhớ nào cũng
có thể được mở ra hoặc được gọi ra ở bất kỳ lúc nào, các thông tin không cần phải
đọc ra hay ghi vào một cách tuần tự. Về thực chất, cả RAM và ROM đều là truy
xuất ngẫu nhiên. Chỉ có điều khác nhau cơ bản là ROM chỉ cho phép đọc mà
không thể ghi vào nó, còn RAM là bộ nhớ có thể đọc và ghi, vì thế RAM được gọi
là “bộ nhớ đọc/ghi”.
5.1.1 Cấu trúc chung của bộ nhớ
Hình sau mô tả sơ đồ khối của một mạch nhớ. Mạch nhớ được nối với các
bộ phận khác trong máy tính thông qua các đường đây địa chỉ và các đường dây dữ
liệu của nó. Kiểm soát mạch nhớ bằng đường dây cho phép (enable), riêng đối với
RAM còn có thêm đường dây kiểm soát đọc/ghi (Read/write).
Các mạch nhớ nói chung được tổ chức dưới dạng ma trận, gồm những hàng
và những cột để xác định vị trí hay địa chỉ nhớ. Mỗi ô trong ma trận gọi là một
phần tử (cell) hay vị trí nhớ (memory location). Vị trí hay phần tử nhớ được dò tìm
bằng cách chọn địa chỉ nhờ mạch giải mã địa chỉ. Mạch này gồm hai phần: mạch
chọn địa chỉ hàng RAS (row-address selector) và mạch chọn địa chỉ cột CAS
(Column-address selector). Các đường dây địa chỉ sẽ chọn địa chỉ hàng và cột.

59
Đường dây enable dùng để mở các mạch điện lối ra bộ nhớ theo ba trạng thái. Còn
đường dây Read/write quyết định dạng thao tác sẽ thực hiện.
Bộ nhớ có loại được tổ chức theo bit, có loại được tổ chức từ. Bộ nhớ tổ chức theo
bit có thể lưu giữ một bit đơn trong mỗi vị trí địa chỉ. Bộ nhớ tổ chức theo từ sẽ
được lựa chọn cả một nhóm phần tử nhớ cùng một lúc với mỗi vị trí địa chỉ. Mỗi
nhóm phần tử nhớ thường là một byte (8 bit), hoặc một từ (16 bit).
Số đường dây địa chỉ của mạch nhớ sẽ quyết định số vị trí nhớ cực đại tính
theo công thức sau:
Số vị trí nhớ cực đại = 2N.
trong đó, N là số lượng các đường địa chỉ.

Addres Data
lines lines
(m) Memory (n)
device

Read/write Device(chip)
enable enable
(RAM only)

Hình 5.2: Sơ đồ chung của một chip nhớ


Hình 5.3: Cấu trúc của một chip nhớ
Column address
selector(CAS)

Read/write enable
Memory
address
lines Row
from address
Data
system selector Memory Buffers
Data
(RAS) matrix lines

Device enable

5.1.2 ROM-BIOS

60
Bất cứ hệ máy tính nào cũng có một vi mạch ROM, vi mạch này chứa
chương trình Vào/ Ra cơ sở BIOS (basic input/output system) của hệ điều hành.
Chương trình này dùng để khởi động máy và cài đặt chế độ làm việc cơ sở cho các
thiết bị ngoại vi.
Người ta chia ROM thành bốn loại sau:
- ROM mặt nạ (maskable ROM) là loại ROM do nhà sản xuất đã nạp sẵn
dữ liệu, khi đó dữ liệu không thể thay đổi được nữa.
- ROM có thể nạp chương trình (PROM - programable ROM) là loại
mạch mà người dùng có thể nạp dữ liệu vào thông qua thiết bị “đốt” PROM. Khi
đã nạp thì các dữ liệu trong PROM cũng không thể thay đổi.
- PROM có thể xoá, còn gọi là EPROM (erasable PROM) là loại ROM
mà người dùng có thể nạp dữ liệu vào và các dữ liệu đó có thể xoá hoặc thay đổi
bằng một thiết bị đặc biệt. EPROM có thể xoá bằng điện (electric EPROM) là loại
ROM có thể nạp và xoá dữ liệu bằng điện được mà không phải sử dụng tia cực tím
như với EPROM.
Trong các máy tính hiện đại, người ta thường sử dụng Flash BIOS dùng
EEPROM. Như vậy nội dung BIOS của máy tính có thể được thay đổi để tương
thích với những mở rộng và nâng cấp hệ thống, mà điều này là không thể thực hiện
đối với những máy tính thế hệ cũ sử dụng BIOS dùng PROM hoặc EPROM.
BIOS gồm nhiều chương trình và hàm. Phần đầu của chương trình BIOS
dùng để kiểm tra hệ thống máy tính, quá trình này gọi là POST. Nếu hệ thống sử
dụng các Card (thẻ cắm) Plug and Play thì giai đoạn này chính là lúc máy tính truy
nhập tham số của thẻ. BIOS nào cũng có chương trình “Setup BIOS” để người
dùng tự chỉnh tham số các thiết bị ngoại vi.
5.1.3 RAM
Người ta chia RAM thành hai hoại:
- RAM tĩnh (SRAM), có khả năng lưu giữ số liệu mãi mãi nếu như không
mất nguồn nuôi.
- RAM động (DRAM), là loại RAM phải được “làm tươi” (refresh) tức là
phải nạp lại dữ liệu đang được lưu trữ theo từng chu kỳ. “Làm tươi” thường bằng

61
cách thực hiện thao tác đọc hoặc ghi và cũng có thể “làm tươi” bằng những thao
tác đặc biệt khác. Loại DRAM có mật độ phần tử nhớ cao nên giá thành khá rẻ so
với SRAM. Các mạch nhớ DRAM được dùng phổ biến trong các thế hệ máy tính
hiện nay.

Hình 5.4: Sơ đồ khối DRAM 16.384 bits(16Kb).

Để tiết kiệm số đường địa chỉ và giảm số chân trên IC, hầu hết các loại
DRAM đều dùng phương pháp địa chỉ multiplex. Trong quá trình đọc hay ghi các
đường địa chỉ đầu tiên chứa các thông tin về hàng rồi tiếp sau mang thông tin về
cột. Để kiểm soát thao tác này, người ta dùng đường dây RAS và CAS như trên
hình 2-3. Khi RAS thấp thì thông tin trên các đường địa chỉ sẽ được mở thông qua
mạch chốt địa chỉ hàng (row-address latch). Khi CAS thấp thì thông tin trên các
đường địa chỉ sẽ được mở thông qua mạch chốt địa chỉ cột (column-address latch).
Mạch điều khiển “làm tươi” phải chọn tuần tự từng hàng các phần tử nhớ, cứ
mỗi hàng một lần, cho đến khi tất cả các hàng đều được “làm tươi”. Đó là phương
pháp làm tươi từng đợt. Trong quá trình đó không được đọc hay ghi dữ liệu vào bộ

62
nhớ cho đến khi kết thúc quá trình. Một cách khác là “làm tươi” từng hàng trong
các chu kỳ rời rạc và gọi là làm tươi theo chu kỳ đơn.

Hình 5.5: Giản đồ thời gian chung của bộ nhớ


5.2 Đơn vị quản lý bộ nhớ
Công việc quản lý bộ nhớ của máy vi tính chủ yếu là do bộ vi xử lý đảm
nhiệm. Dên cạnh đó còn có DMAC (Direct Memory Acess Controller) cũng tham
gia quản lý bộ nhớ trong việc truyền số liệu giữa controller ổ đĩa với bộ nhớ và
“làm tươi” bộ nhớ. Ở những máy có bộ nhớ Cache thì việc thực hiện các công việc
truyền số liệu giữa Cache Memory và RAM do Cache Memory Controller đảm
nhận.
Bản chất của việc quản lý bộ nhớ là các thanh ghi của vi xử lý đưa ra các
địa chỉ của ô nhớ hoặc của cổng I/O qua bus địa chỉ, cùng các lệnh điều khiển/
trạng thái khác và đọc vào/ ghi ra các số liệu của các ô nhớ đó. Các bộ phận bên
ngoài vi xử lý sẽ giải mã các địa chỉ và các tín hiệu điều khiển/ trạng thái đó để trỏ
vào các byte/ từ/ từ kép... của bộ nhớ để thực hiện các thao tác tương ứng.
Đối với các ổ đĩa trở, việc quản lý bộ nhớ là thực hiện các lệnh của hệ điều
điều hành lên các file (có địa chỉ 3 chiều là C-H-S), cụ thể là truyền số liệu nhờ
DMAC giữa vùng đệm (buffer) của bộ điều khiển ổ đĩa với bộ nhớ RAM.
Các bộ vi xử lý Intel từ thế hệ 286 trở đi phân biệt hai mode địa chỉ: mode
địa chỉ thực (chỉ quản lý 20 bit địa chỉ vật lý của bộ nhớ) và mode địa chỉ logic
(quản lý tới 32 bit địa chỉ ảo nhờ các thanh ghi ẩn trong bộ vi xử lý).

63
Trong các thiết bị ngoại vi, như bộ điều khiển ổ đĩa, bộ điều khiển màn
hình, máy in... cũng có tổ chức bộ nhớ riêng của chúng để tiện cho việc cất giữ và
xử lý với các đặc thù riêng.
Các bộ nhớ RAM-ROM và các vùng nhớ của bộ nhớ ngoài (trên các ổ đĩa),
khác nhau về cách mã hoá các bit, cách tổ chức, do đó cả cách truy nhập cũng khác
nhau.
5.3 Tổ chức bộ nhớ của vi xử lý
Bộ nhớ của vi xử lý có thể xem như bao gồm có bộ nhớ ROM và bộ nhớ
RAM. Bộ nhớ RAM của vi xử lý chính là các thanh ghi (thanh ghi chung, thanh
ghi chỉ số, thanh ghi đoạn, thanh ghi ngăn xếp, thanh ghi trạng thái, thanh ghi cờ,
các bộ đệm số liệu/ địa chỉ/ điều khiển...). Còn bộ nhớ RAM là bộ phận giải mã
lệnh để phát ra các vi lệnh.
Nhằm mục đích quản lý được số lượng địa chỉ nhớ (ảo) nhiều hơn số đường
địa chỉ của bộ vi xử lý và bảo vệ các vùng nhớ của các nhiệm vụ khác nhau (task)
và của hạt nhân (kernal) chống truy nhập không hợp pháp, các vi xử lý có các cách
tổ chức đặc biệt các thanh ghi địa chỉ (bộ phận phân trang, điều khiển đoạn của các
nhiệm vụ).
Các bộ vi xử lý từ thế hệ 486 trở đi còn có một bộ nhớ Cache Memory với
kích thước nhiều Kbyte để chứa mảng các lệnh và số liệu đang thường dùng lấy từ
bộ nhớ RAM, nhằm tăng tốc độ truy nhập.
Để tăng tốc độ tính toán các phép toán dấu chấm động, trong các bộ vi xử lý
từ 486 trở đi còn có bộ phận dấu chấm động (FPU - Floating Point Unit), bộ phận
này cũng có các thanh ghi FPU phục vụ riêng cho nó.
5.4 Tổ chức bộ nhớ trong của máy vi tính
Bộ nhớ trong của máy tính dùng để chứa chương trình và số liệu của phần
chương trình hạt nhân và các nhiệm vụ. Mỗi byte được gán cho một địa chỉ để vỉ lý
và DMAC có thể truy nhập tới.
Bộ nhớ RAM ở những máy từ 386 trở đi có thể được tách riêng ra bộ nhớ
đệm (cache memory), là RAM tĩnh với thời gian truy nhập nhanh, có kích thước
dưới 1Mb được nối ngay vào bus nội bộ của máy tính sát ngay vi xử lý và được

64
điều khiển bởi Cache controller. Phần còn lại là DRAM, chậm hơn nhưng rẻ hơn
và có dung lượng lớn hơn. Hình 5.6 thể hiện sơ đồ khối bên trong một máy 386.
Trong sơ đồ: Vi xử lý là 80386, đồng xử lý toán là 80387, cache controller
82385 được nối trực tiếp với nhau thành một bus cục bộ. Các đường địa chỉ A2-
A31 của 386 nối trực tiếp tới các đường cùng tên của 82385DX, các đường số liệu
D0-D31 của 386 được nối trực tiếp tới các đường số liệu cùng tên của 387DX.
Hơn nữa, các chân quy định chu kỳ bus D/C#, W/R# và M/IO# được nối trực tiếp
tới các chân tương ứng của 82385DX.
Từ bus local của VXL, các đường địa chỉ được đệm ra bằng các chốt địa chỉ
8 bit 74373 (không vẽ trong hình). Các đường số liệu của bus local được đệm hai
chiều bằng Data Buffer 82345. Controller ISA 82344 nối giữa bus local của CPU
với bus hệ thống để làm các chức năng giao tiếp với CPU, system controller 346,
data buffer 345, ROM, bus, các thiết bị ngoại vi như sau:
- Nhận các tín hiệu BE0# - BE3# của CPU, ROM8# và IOCHRDY từ bus
ISA để sinh ra các tín hiệu chọn byte chẵn và byte lẻ SA0# và SBHE#
- Tạo các tín hiệu giao tiếp giữa 344, 345 và 346.

65
Hình 5.6: Phần trung tâm máy tính AT 386
Local
DRAM

82315
80386DX
Data
CPU
Buffer
Local
DRAM

82386
80387DX
System
Coprocessor
Controller

Local
DRAM
82385DX 82384
Cache ISA
Controller Controller

Cache BIOS
SRAM EPROM

Industry standard architecture (ISA) PC/AT expansion bus

Local CPU Bus System control/ status bus


System address bus System data bus Peripheral bus

- Chứa khối điều khiển ngoại vi Peripheral Control gồm các vi mạch có độ
tích hợp cực cao (VLSI) quen thuộc: hai 82C59 (ngắt), hai chip 82C37A (DMAC),
vi mạch định thời 82C54, thanh ghi địa chỉ trang 74LS612, bộ driver cho loa, port
B parallel I/O, đồng hồ thời gian thực và bộ đếm làm tươi bộ nhớ.
- Giải mã địa chỉ để tạo ra các tín hiệu chọn chip CS8042# cho controller bàn
phím 8042 và ROMCS# để cho phép chọn ROM BIOS.

Vi mạch Peripheral Combo 82341 được ghép vào bus mở rộng của bus ISA,
nó chứa các VLSI để thực hiện một số chức năng của các thiết bị ngoại vi sau đây:
- Hai cổng nối tiếp không đồng bộ 16C450
- Một cổng song song cho máy in

66
- Đồng hồ thời gian thực
- RAM sổ tay, các controller cho bàn phím và chuột.
- Interface cho đĩa cứng (tiêu chuẩn IDE).
Controller đĩa mềm 82077 có thể điều khiển tới 4 ổ đĩa mềm các loại 5”1/2
và 3”1/2.
5.6 Cơ chế truy nhập bộ nhớ trực tiếp DMA (Direct Memory Access)
Phương pháp ngắt đảm bảo thời gian trả lời yêu cầu vào/ra số liệu của ngoại
vi là rất ngắn. Nhưng việc phục vụ quá trình vào/ra lạ được thực hiện bằng phần
mềm, do đó một số ngoại vi (như bộ hiển thị màn hình CRT) phương pháp ngắt
không đủ nhanh để đáp ứng yêu cầu chuyển số liệu rất cao. Lúc này phải dùng giải
pháp bằng phần cứng. Chương trình con thực hiện chuyển số liệu giữa ngoại vi và
bộ nhớ được thay bằng một dơn vị điều khiển điện tử đặc biệt là chip truy nhập bộ
nhớ trực tiếp DMAC (direct memory access controller). Phương pháp này cho
phép vào/ra số liệu rất nhanh. Tốc độ chuyển số liệu chỉ hạn chế bởi thời gian truy
nhập của bộ nhớ. CPU không cần phải đọc, giải mã và thực hiện các lệnh chuyển
số liệu, các lệnh điều chỉnh địa chỉ và các lệnh kiểm tra độ dài mảng đã chuyển để
biết thời điểm kết thúc. Nó hoàn toàn chuyển quyền điều khiển bus cho chip
DMAC và số liệu được truyền trực tiếp giữa ngoại vi và bộ nhớ dưới sự điều khiển
của chip này. Chip DMAC sẽ tạo địa chỉ, các tín hiệu điều khiển đọc/ ghi ngoại vi,
tính số từ đã chuyển và thông báo khi chuyển xong mảng số liệu.

Hình sau cho thấy có các được liên hệ trực tiếp giữa bộ nhớ chính và các
ngoại vi qua chip DMAC mà không qua CPU.

Không gian
vào/ra
CPU
Chip DMAC

Bộ nhớ chính

Hình 5.7: Các đường liên hệ trực tiếp giữa bộ nhớ chính và ngoại vi

Một phép DMA gồm các bước sau:

67
- Thông báo cho CPU về yêu cầu thực hiện DMA.

- Điều khiển bus hệ thống mà không làm ảnh hưởng tới hoạt động bình
thường của CPU hoặc không gây xung đột bus.

- Xác định và tạo địa chỉ, tính số từ đã chuyển.

- Thông báo kết thúc DMA.

Có hai phương pháp DMA:

- Lấy lén chu kì (cycle stealing): chip DMAC sử dụng những chu kì mà
CPU không truy nhập bộ nhớ, như vậy nó có thể sử dụng bus mà không cần thông
báo cho CPU. Nhược điểm của phương pháp này là yêu cầu về thời gian rất khắt
khe.

Phương pháp thông dụng hơn là bắt CPU phải tự treo (trở về trạng thái trở
kháng cao) và nhường quyền điều khiển bus cho chip DMAC. Thay vì gửi yêu cầu
ngắt đến CPU, ngoại vi gửi đến chip DMAC yêu cầu số liệu DQR. Lúc đó chip
DMAC phát ra tín hiệu đặc biệt HOLD gửi tới CPU . CPU sẽ kết thúc chu kì máy
hiện đại , thông báo cho chip DMAC trạng thái của mình bởi tín hiệu “ghi nhận
treo”. HLDA và sau đó tự treo, thả nổi bus. Chip DMAC lấy quyền điều khiển bus,
tạo địa chỉ, ghi nhận yêu cầu số liệu của ngoại vi bằng tín hiệu DACK và tạo tín
hiệu điều khiển đọc/ghi bộ nhớ MEMRD, MEMWR và đọc/ghi ngoại vi IORD,
IOWR. Số liệu lúc này được chuyển trực tiếp giữa ngoại vi và bộ nhớ. Thông
thường chip DMAC chuyển liên tục cả mảng số liệu, nên trong nó có thanh đếm số
từ (word count register) cho mỗi kênh. Sau mỗi lần chuyển được một từ, nội dung
thanh đếm giảm đi 1, địa chỉ DMA được hiệu chỉnh lại (hoặc tăng hoặc giảm 1).
Khi nội dung thanh đếm số từ bằng 0, chip DMAC thông báo kết thúc hoạt động
DMA bằng tín hiệu TC (terminal count) được tạo từ thanh đếm số từ.
5.5.1 Cấu trúc của chip DMA - 8237
Chip DMA - 8237 gồm ba khối chính:

- Khối điều khiển và phân chia thời gian cho các hoạt động bên trong và tạo tín
hiệu điều khiển cho bên ngoài.

68
- Khối điều khiển giải mã lệnh do CPU đưa tới trước khi phục vụ DMA và giải
mã từ điều khiển chế độ để chọn kiểu DMA.

- Khối mã hoá ưu tiên làm trọng tài giải quyết ưu tiên cho những kênh DMA yêu
cầu phục vụ trong cùng một thời điểm.

Hình 5.8 là sơ đồ các chân tín hiệu:

IOR (chân số 1): chỉ thị rằng chip DMAC đang đọc số liệu từ ngoại vi qua
địa chỉ cổng.

IOW (chân số 2): DMAC đang ghi số liệu tới ngoại vi qua cổng.

MEMR (chân số 3): số liệu được đọc từ bộ nhớ chính.

MEMW (chân số 4) : số liệu đang được ghi vào bộ nhớ chính.

READY (chân số 6): tín hiệu vào từ bộ nhớ hoặc ngoại vi.

HLDA (chân số 7): CPU hoặc bus master báo cho biết nó đã rời khỏi bus
cho DMAC.

ADSTB (chân số 8): nhận byte cao vào chốt địa chỉ ngoài của DMAC.

AEN (chân số 9): kích hoạt chốt địa chỉ của DMAC.

HRQ (chân số 10): tín hiệu yêu cầu DMA từ chip DMA - 8237.

CS (chân số 11): tín hiệu chọn chip.

CLK (chân số 12): lối vào xung nhịp đồng hồ (4,77 MHz hoặc 7,16 MHz
trong PC).

RESET (chân số 13)

DACK 0 − DACK 3 (chân số 25, 24, 14, 15): chấp nhận DMA.

DREQ0 - DREQ3 (chân số 19 - 16) : đòi hỏi DMA từ ngoại vi.

DB0 - DB7 (chân số 30 - 26, 23 - 21): bus số liệu 2 hướng.

A0 - A3 (chân số 32 - 35): ở trạng thái standby, CPU dùng nibble này để


định địa chỉ các thanh ghi. Khi 8237 được kích hoạt, đây là 4 bit địa chỉ thấp.

69
A4 - A7 (chân số 37 - 40): ở trạng thái standby, 4 chân này bị cấm. Khi
DMA - 8237 được kích hoạt, đây là 4 bit địa chỉ.

EOP (chân số 36): kết thúc xử lí DMA.

Vcc (chân số 5, 31): nguồn nuôi +5V

GND (chân số 20): nối đất 0V.

Hình 5.8: Sơ đồ chân tín hiệu DMA

5.5.2 Các trạng thái


Vi xử lý 8237 làm việc trong hai chu kì máy cơ bản: chu kì nghỉ và chu kì
hoạt động. Mỗi chu kì máy DMA bao gồm một số trạng thái. Có tất cả 7 trạng thái,
mỗi trạng thái chiếm một chu kì nhịp đồng hồ.

SI: Trạng thái không hoạt động. 8237ở trạng thái này khi không có yêu cầu
DMA hợp lệ, chip chỉ nhận lệnh từ CPU khi đang ở trạng thái này.

70
S0: là trạng thái đầu của quá trình phục vụ DMA, khi chip DMAC đã gửi yêu
cầu treo cho CPU nhưng chưa nhận được tín hiệu ghi nhận treo. Khi nhận được tín
hiệu ghi nhận treo, chip DMAC chuyển sang trạng thái SI.

S1, S2, S3, S4: các trạng thái làm việc của DMAC. Lúc này chip DMAC trực
tiếp điều khiển chuyển số liệu bằng các địa chỉ, tín hiệu điều khiển đọc/ghi do
chính mình tạo ra.

SW: là trạng thái đợi được xen vào giữa S3 và S4 do tác động của đầu vào
READY của chip DMAC. SW cần thiết khi thời gian thâm nhập của bộ nhớ quá
lớn.

5.5.3 Các bộ nhớ nội bộ


Các bộ nhớ nội bộ được chia thành hai nhóm:

Nhóm các thanh ghi điều khiển, trạng thái và nhóm các thanh ghi làm việc.
Bảng sau liệt kê các thanh ghi đó:

Tên thanh ghi Độ dài (bit) Số lượng


Địa chỉ gốc 16 4

Số từ gốc 16 4

Địa chỉ tức thời 16 4

Số từ tức thời 16 4

Trạng thái 8 1

Lệnh 8 1

Tạm thời 8 1

Chế độ 6 4

Mặt nạ 4 1

Yêu cầu DMA 4 1

Độ dài và số lượng các thanh ghi

71
5.5.4 Chu kì nghỉ
Khi không có yêu cầu DMA, 8237ở chu kì nghỉ bằng cách liên tục thực hiện
trạng thái SI. Nó kiểm tra các đường yêu cầu số liệu DRQ vào tất cả các chu kì
đồng hồ, đồng thời kiểm tra chân chọn mạch CS để xem CPU có ý định gửi lệnh
đến hoặc đọc/ghi thông số, trạng thái, chế độ DMA từ (hoặc vào) chip DMAC hay
không. Nếu CS = 0 và HRQ = 0, 8237 tuân theo sự điều khiển bằng chương trình
của CPU. A0 - A3 là những đầu vào địa chỉ để chọn các thanh ghi trong của 8237.
Những thanh ghi này được ghi vào hoặc đọc ra tuỳ thuộc vào tín hiệu điều khiển
đọc/ghi IORD và IOWD của CPU.

5.5.5 Chu kì hoạt động


Lúc này chip DMAC phát yêu cầu treo HRQ cho CPU. Số liệu được chuyển
bằng DMA trong những chu kì này theo một trong những chế độ sau:

- Chế độ chuyển từng từ (Single Transfer Mode)

- Chế độ chuyển mảng (Block Transfer)

- Chế độ chuyển theo nhu cầu (Demand Transfer)

- Chế độ ghép tầng (Cascade mode)

5.5.6 Các chế độ ưu tiên


Vi xử lý 8237 có thể làm việc ở hai chế độ ưu tiên khác nhau theo quy định
phần mềm từ CPU:

Chế độ ưu tiên cố định: kênh 0 có mức ưu tiên cao nhất, kênh 3 có mức ưu
tiên thấp nhất. Chế độ ưu tiên vòng: kênh vừa được phục vụ sẽ có mức ưu tiên thấp
nhất, lúc mới lập chế độ kênh 0 ở mức cao nhất.

5.5.7 Làm việc với CPU


Trước khi để DMAC làm việc, CPU cần phải lập cho nó trật tự ưu tiên, mặt
nạ cho từng kênh.v.v… và quy định cho từng kênh địa chỉ DMA, độ dài mảng (số
đếm từ) bằng cách ghi vào các thanh ghi trong của 8237 tuân theo quy định về mã

72
của chúng. Hình sau mô tả cụ thể ý nghĩa mã của các thanh ghi lệnh, thanh ghi chế
độ, thanh ghi yêu cầu và thanh ghi mặt nạ.

Trong quá trình hoạt động, 8237 luôn cập nhập trạng thái của mình vào
thanh ghi trạng thái để CPU có thể đọc ở bất cứ thời điểm nào. Thông tin trạng
thái cho biết kênh DMA nào đã đạt đến số đếm kết thúc TC (terminal count) tức là
đã chuyển xong mảng số liệu có độ dài quy định ở thanh ghi số đếm từ gốc, hoặc
bị bắt buộc kết thúc chuyển do tác động của tín hiệu EOP đang chờ phục vụ ở bất
cứ kênh nào nếu có.

5.5.8 Cấu trúc DMA trong PC


Trong PC/XT một chip DMAC chỉ có khả năng phục vụ các ngoại vi 8 bit
(các thiết bị chỉ có các thanh ghi 8 bit). Trong máy PC/AT (16 bit) có thêm một
chip DMAC nữa gọi là chủ (master) được nối với CPU. Các chân HRQ và HLDA
của chip DMAC tớ được nối với kênh 0 của chip chủ để nhằm cho các kênh 0-3 có
mức ưu tiên cao hơn 3 kênh của chip chủ. Các kênh 0-3 của chủ được quy ước là
kênh DMA từ 4-7 của máy AT. Bốn kênh của chip tớ phục vụ cho ngoại vi 8 bit,
trong khi đó 3 kênh từ 5 đến 7 không sử dụng được cấu hình cho các thiết bị 16 bit.

Kênh Bộ điều khiển Độ rộng Dùng cho


0 1 8 bit làm tươi bộ nhớ
1 1 8 bit SDLC (synch, data link Control)
2 1 8 bit bộ điều khiển đĩa mềm
3 1 8 bit PC/XT: bộ điều khiển đĩa cứng,
AT: không dùng
4 2* 16 bit nối tầng DMAC, sang DMAC
5 2* 16 bit dự trữ
6 2* 16 bit dự trữ
7 2* 16 bit dự trữ
*: chỉ có trong AT
Cấu trúc DMA trong PC

Bảng sau liệt kê địa chỉ vào/ ra thanh ghi điều khiển và trạng thái của DMA – 8237

73
DMA (1) DMA(2) Đọc/ghi (R/W) Thanh ghi
08h D0h R trạng thái
08h D0h W lệnh
09h D2h W yêu cầu DMA
0Ah D4h W che kênh
0Bh D6h R chế độ DMA
0Fh DEh W mặt nạ

Thanh ghi trạng thái của DMA - 8237

(1): chủ trong PC/XT, tớ trong AT; (2): chủ trong AT

Các địa chỉ vào/ra của thanh ghi địa chỉ và đếm số từ được liệt kê dưới đây:

DMA (1) DMA (2) Thanh ghi


00h C0h địa chỉ kênh 0/4
01h C1h đếm kênh 0/4
02h C2h địa chỉ kênh 1/5
03h C3h đếm kênh 1/5
04h C4h địa chỉ kênh 2/6
05h C5h đếm kênh 2/6
06h C6h địa chỉ kênh 3/7
07h C7h đếm kênh 3/7

Bài 6: CỔNG TRAO ĐỔI THÔNG TIN SONG SONG VỚI NGOẠI VI

Máy tính PC luôn có nhu cầu trao đổi thông tin với các thiết bị ngoại vi, hoạt
động trao đổi thông tin với ngoại vi được thực hiện thông qua các cổng (Port). Các
thông số cơ bản khi tổ chức một cổng là địa chỉ của cổng, hướng truyền thông tin
của cổng và độ rộng kênh dữ liệu của cổng. Trong bài này ta sẽ đi sâu vào nghiên
cứu cổng trao đổi dữ liệu. Có nhiều phương pháp điều khiển sự trao đổi dữ liệu
như: vào/ra điều khiển bằng chương trình, vào/ra điều khiển bằng ngắt, vào/ra điều
khiển bằng phần cứng. Trong nhóm thứ nhất, chương trình sẽ nắm quyền điều
74
khiển quá trình trao đổi dữ liệu vào/ra. Nhóm thứ hai là nhóm ngoại vi chủ động
đưa yêu cầu cho hệ vi xử lý khi ngoại vi có nhu cầu trao đổi dữ liệu. Nhóm thứ ba
là nhóm trao đổi dữ liệu được điều khiển bằng phần cứng. Máy tính PC sử dụng
phối hợp cả ba phương pháp trên.
6.1 Các chế độ vào/ra thông tin trong máy tính
6.1.1 Vào/ra thông tin tách biệt
Trong chế độ này, chỉ có lệnh IN và OUT thực hiện trao đổi dữ liệu với
ngoại vi (cách dùng các lệnh này đề nghị xem trong phụ lục tham khảo). Bộ vi xử
lý 80x86 sử dụng 16bit địa chỉ để gán địa chỉ cho các cổng vào/ra nên nó quản lý
được tối đa 65.536 cổng vào và 65.536 cổng ra. Số lượng cổng như vậy là quá đủ
cho mọi ứng dụng giao tiếp với ngoại vi. Thực tế rất ít khi sử dụng tới giá trị cực
đại về số lượng đó. Hình sau mô tả cơ chế đánh địa chỉ cho các cổng vào/ra:

FFFFh FFFFh

Địa chỉ 65.536 Địa chỉ 65.536


cổng cổng
vào ra
0000h 0000h

IN, /IORD + Các bit địa chỉ OUT, /IOWR + Các bit địa chỉ
Tổ hợp lệnh + tín hiệu: Tổ hợp lệnh + tín hiệu:

Hình 6.1: Tổ chức địa chỉ cổng vào/ra của 80x86


Lệnh IN và OUT đòi hỏi một số chu kỳ máy để thực hiện: chu kỳ máy thứ
nhất là chu kỳ nhận lệnh OF, chu kỳ máy thứ hai để đưa địa chỉ cổng từ thanh ghi
DX (nếu địa chỉ này >255) hay địa chỉ trực tiếp ghi trong lệnh ra kênh địa chỉ. Chu
kỳ tiếp theo có thể là IORD hoặc IOWR. Trong chu kỳ máy này, lệnh OUT gửi dữ
liệu từ bộ vi xử lý ra thiết bị ngoại vi, lệnh IN nhận dữ liệu từ thiết bị ngoại vi vào
bộ vi xử lý. Trong chu kỳ máy IORD hoặc IOWR, các tín hiệu /IORD và /IOWR
xác định thời điểm để chốt cổng ba trạng thái hoặc để chốt cổng ra.
Sơ đồ phần cứng chọn thiết bị được thiết kế phụ thuộc vào số lượng thiết bị
vào/ra mà hệ yêu cầu. Không cần phải giải mã địa chỉ nếu như hệ chỉ có một cổng

75
vào và một cổng ra. Tín hiệu điều khiển với /IORD sẽ tạo xung đọc và /IOWR để
tạo xung ghi. Các xung nhịp này điều khiển trực tiếp thanh ghi đệm vào và thanh
ghi chốt ra. Nếu trong hệ có nhiều cổng vào và cổng ra, cần phải giải mã địa chỉ để
tạo xung chọn thiết bị cho mỗi cổng.
Phương pháp địa chỉ đơn giản nhất là chọn tuyến tính. Phương pháp này
không đòi hỏi phần cứng, song chỉ sử dụng cho hệ có tổng số cổng vào/ra không
lớn hơn 16. Ở đây mỗi bit địa chỉ có quan hệ loại trừ với cổng vào/ra và tổ hợp với
các giá trị logic /IORD hoặc /IOWR để tạo ra xung chọn thiết bị, cách lựa chọn
này được mô tả đơn giản như sau:
Hình 6.2: Tạo tín hiệu chọn cổng bằng giải mã tuyến tính đơn giản
A1
/IN1 A3
/OUT3
/IORD
/IOWR

A4 A15
/IN4 /OUT15

/IORD /IOWR

Bất lợi của phương pháp giải mã địa chỉ tuyến tính là lỗi chương trình có thể
gây nên nhầm lẫn địa chỉ (tức là địa chỉ không đơn trị). Khi đó có thể sẽ có hai hay
nhiều cổng vào đồng thời kích hoạt kênh dữ liệu.
Để lựa chọn nhiều cổng vào/ra và đảm bảo sự lựa chọn là đơn trị, người ta
sử dụng bộ giải mã địa chỉ. Để có nhiều xung chọn thiết bị, ta cần các bộ giải mã
có nhiều đầu vào vì như vậy sẽ giảm số IC cần thiết. Ví dụ các bộ giải mã có n đầu
vào và 2n đầu ra hay được sử dụng hơn cả. Hình 6.3 mô tả cấu trúc của bộ giải mã
địa chỉ 74LS138.

76
Ngoài các tín hiệu địa chỉ cơ sở dùng để lựa chọn các đầu ra của các mạch
giải mã địa chỉ theo kiểu 74LS138, các tín hiệu địa chỉ còn lại và các tín hiệu chốt
(/IORD và /IOWR) cũng tham gia vào quá trình lựa chọn nhằm mục đích tạo ra
tính đơn trị và phân tách các cổng vào/ra.

16 15 14 13 12 11 10 9
Vcc Y0 Y1 Y2 Y3 Y4 Y5 Y6
ABC – 3 bit
Yi – Các đầu
Chú thích:

Ei – Enable
địa chỉ vào

A B C /E1 /E2 E3 Y7 GND


1 2 3 4 5 6 7 8
ra

+Vcc
A0 A1 A2

/IORD hoặc /IOWR A15---A3

Hình 6.3: Sơ đồ tín hiệu của 74LS138


Ngoài ra, khi sử dụng các bộ giải mã có đầu vào Enable mắc nối tiếp nhau ta
còn có thể tạo ra rất nhiều tín hiệu “chọn thiết bị”. Trong thực tế, máy tính PC
thường sử dụng kết hợp phương pháp giải mã địa chỉ “cứng” bằng cách sử dụng
một số vi mạch 74LS138 (139), 8205 và phương pháp giải mã địa chỉ mềm sử
dụng vi mạch PAL LS68 (vi mạch giải mã địa chỉ lập trình được).
6.1.2 Vào/ra thông tin theo địa chỉ bộ nhớ
Các lệnh tham chiếu bộ nhớ cũng có khả năng trao đổi dữ liệu với thiết bị
ngoại vi nếu cổng vào/ra được gán cho vùng địa chỉ của bộ nhớ. Các thanh ghi liên
quan tới cổng vào/ra được coi như là các ngăn nhớ.
Khi vào/ra thông tin theo địa chỉ bộ nhớ, CPU thực hiện giải mã toàn bộ
20bit địa chỉ (80286) hoặc nhiều hơn (386 trở lên). Mạch logic bên ngoài sinh ra
xung chọn thiết bị vào/ra chỉ khi các tín hiệu điều khiển có các giá trị tương
ứng /MEMRD = 0 hoặc /MEMWR = 0.
Có thể nói, đây là một biện pháp “đánh lừa” CPU vì khi gửi địa chỉ và các
tín hiệu điều khiển để đọc thông tin từ bộ nhớ, nó không cần xác định nơi gửi dữ

77
liệu vào là bộ nhớ hay thiết bị vào/ra. CPU chỉ cần nơi gửi dữ liệu duy trì khoảng
thời gian tối thiểu để dữ liệu có thể ổn định hoặc nó sử dụng đầu vào READY để
tạo thêm một số trạng thái đợi (WAIT) cần thiết. Tương tự như vậy, khi CPU ghi
thông tin vào bộ nhớ, nó chỉ cung cấp địa chỉ, dữ liệu và xung đồng bộ rồi tiếp tục
chức năng của nó. Mạch logic bên ngoài sẽ xác định là bộ nhớ hay cổng vào/ra nào
phải tiếp nhận dữ liệu đưa ra.
Như vậy, có thể tóm tắt những điểm khác nhau cơ bản trong hai chế độ vào
ra thông tin của CPU (ngoài việc sử dụng các lệnh và giải mã địa chỉ) như sau:
- Đối với mạch phối ghép vào/ra theo bản đồ nhớ, các tín hiệu điều khiển
là /MEMRD và /MEMWR, còn vào ra tách biệt là /IORD và /IOWR.
- Ở vào/ra thông tin tách biệt, số cổng bị hạn chế đến 65.536 cổng vào và
65.536 cổng ra còn vào ra theo địa chỉ bộ nhớ, số cổng có thể lên tới 2 20 cổng. Tất
nhiên, không bao giờ cần đến nhiều cổng như vậy.
- Đối với vào/ra theo địa chỉ bộ nhớ, có thể thực hiện các phép tính số học
và logic trực tiếp trên các dữ liệu vào/ra mà không cần phải chuyển chúng vào các
thanh ghi tích luỹ. Dữ liệu có thể chuyển tới mọi thanh ghi chứ không nhất thiết
phải là thanh ghi tích luỹ.
- Nhược điểm quan trọng của vào/ra theo địa chỉ bộ nhớ là do nó chiếm
không gian địa chỉ nhớ nên dẫn đến việc phân mảng không gian nhớ.
6.2 Vi mạch ghép nối ngoại vi lập trình được PPI 8255A
Trong mục này, ta sẽ nghiên cứu vi mạch ghép nối ngoại vi lập trình được
PPI 8255A (PPI – Programmable Peripheral Interfacing còn A – Advance với ý
nghĩa là “cải tiến”), một trong những chip vào/ra được sử dụng rộng rãi nhất. Chip
này có thể được dùng cho cả vào/ra tách biệt và vào/ra theo địa chỉ bộ nhớ. Đó là
IC được đóng vỏ dạng DIP (Dual In Package) 40 chân. Hình sau đây mô tả cấu
trúc bên ngoài của 8255A:

78
PA3 1 40 PA4
PA2 2 39 PA5
PA1 3 38 PA6
PA0 4 37 PA7
/RD 5 36 /WR
/CS 6 P 35 /RESET

GND 7 P 34 D0
A1 8 I 33 D1
A0 9 8 32 D2
PC7 10 2 31 D3
PC6 11 5 30 D4
PC5 12 5 29 D5
PC4 13 A 28 D6
PC0 14 27 D7
PC1 15 26 Vcc
PC2 16 25 PB7
PC3 17 24 PB6
PB0 18 23 PB5
PB1 19 22 PB4
PB2 20 21 PB3

Hình 6.4: Sơ đồ chân vi mạch PPI 8255A


8255A có ba cổng truy nhập độc lập là PA, PB và PC do vậy nó kinh tế hơn
nhiều so với các cổng đơn thiết kế trên các bộ đệm/chốt 74LS373 và 74LS374.
Điều quan trọng nữa là có thể lập trình riêng cho từng cổng của 8255A thành cổng
vào hay cổng ra hoặc chuyển đổi chúng một cách linh hoạt. Ngoài ra, 8255A còn
có thể được sử dụng để CPU giao tiếp với các thiết bị thông qua tín hiệu bắt tay
(Handshaking Signals).
6.2.1 Các chân của 8255A
PA0 -- PA7: Cổng PA (8 bit) có thể được lập trình thành cổng vào, cổng ra
hoặc tất cả các bit là vào/ra hai chiều.
PB0 -- PB7: Cổng PB (8 bit) có thể được lập trình thành cổng vào hoăc
cổng ra. PB không thể sử dụng làm cổng vào/ra hai chiều.
PC0 -- PC7: Cổng PC (8 bit), có thể là cổng vào hoặc cổng ra. Các chân này
cũng có thể được chia thành hai phần: phần cao PCH (PC4 -- PC7) và phần thấp

79
PCL (PC0 -- PC3), mỗi phần có thể được dùng làm cổng vào hoặc cổng ra. Ngoài
ra, còn có thể lập trình riêng cho từng bit từ PC0 đến PC7.
/RD và /WR: Là hai chân vào đưa tới 8255A dùng để điều khiển quá trình
đọc/ghi thông tin. Các tín hiệu này thường nối với /IORD và /IOWR trong chế độ
vào/ra tách biệt hoặc /MEMRD và /MEMWR trong chế độ vào/ra theo địa chỉ bộ
nhớ.
RESET: Là tín hiệu vào mức tích cực cao để thiết lập 8255A về chế độ
ngầm định (các cổng là cổng vào để tránh xung đột). Chân này thường nối với tín
hiệu RESET của máy tính.
A0, A1 và /CS: /CS là tín hiệu chọn chip còn A0 và A1 dùng để chọn từng
thành phần trong 8255. Kết hợp các tín hiệu này như bảng sau:

/CS A0 A1 Chọn
0 0 0 Cổng PA
0 0 1 Cổng PB
0 1 0 Cổng PC
0 1 1 Thanh ghi từ điều khiển (CWR)
1 x x Không chọn 8255A

D0 -- D7: Là các chân dữ liệu của 8255A dùng để trao đổi thông tin với
CPU, thường thì các chân này nối tới phần thấp của kênh dữ liệu hệ thống.
GND và Vcc: Là các chân dùng để nối đất và cấp nguồn cho 8255A.
6.2.2 Điều khiển hoạt động của 8255A
Bên trong 8255A có một thanh ghi từ điều khiển. Bằng cách ghi các giá trị
từ điều khiển khác nhau lên thanh ghi này, ta có thể đưa 8255A vào các chế độ
hoạt động khác nhau. Có hai loại từ điều khiển cho 8255A:
- Từ điều khiển định nghĩa cấu hình cho các cổng PA, PB, PC.
- Từ điều khiển lập/xoá (Set/Reset) từng bit ở đầu ra PC.
Thanh ghi từ điều khiển có 8 bit, bit D7 của nó được dùng làm cờ (Flag).
Khi D7 = 1 thì đó là từ điều khiển định cấu hình cho các cổng còn khi D7 = 0 thì
đó là từ điều khiển lập/xoá từng bit cho PC. Ta lần lượt xét hai loại từ điều khiển
này.

80
Từ điều khiển định nghĩa cấu hình cho các cổng:

D7 D6 D5 D4 D3 D2 D1 D0
F=1 MA1 MA0 A CA MB B CB

Các bit điều khiển nhóm A Các bit điều khiển nhóm B
* MA1 và MA0 chọn chế độ cho nhóm A: * Bit MB dùng chọn chế độ
00: Mode 0 cho nhóm B:
01: Mode 1 MB = 0 : Mode 0
1x: Mode 2 MB = 1 : Mode 1
* Bit A định nghĩa PA: * Bit B định nghĩa PB:
A = 0 : Cổng ra B = 0 : Cổng ra
A= 1 : Cổng vào B = 1 : Cổng vào
* Bit CA định nghĩa PCH: * Bit CB định nghĩa PCL:
CA = 0 : Cổng ra CB = 0 : Cổng ra
CA = 1 : Cổng vào CB = 1 : Cổng vào

Từ điều khiển lập/xoá từng bit đầu ra cổng PC:

D7 D6 D5 D4 D3 D2 D1 D0
F=0 0 0 0 S/R
0: Xoá
Chọn bit PCi tương ứng với PCi
Ngầm định D7 -- D4 = 0
tổ hợp (D3 D2 D1) 1: Lập
PCi

6.2.3 PPI 8255A ở các chế độ cụ thể


Mode 0: Chế độ vào/ra đơn giản
Intel gọi chế độ 0 là chế độ vào ra cơ sở. Tên gọi khác phổ biến hơn là
vào/ra đơn giản. Trong chế độ này, các cổng A, B, C đều có thể được lập trình

81
thành cổng vào hoặc ra (lưu ý rằng không thể đồng thời vừa là cổng vào vừa là
cổng ra). Một đặc điểm quan trọng là hai nửa của cổng C có thể lập trình để truy
vấn độc lập.
+ Ví dụ sau đây khởi tạo cho PPI 8255A ở địa chỉ cơ sở 60h, lấy dữ liệu từ cổng PA rồi
gửi tới cổng PB và PC:
MOV AL, 90h; byte điều khiển PA – vào, PB và PC – ra.
OUT 53h, AL; đưa tới thanh ghi từ điều khiển
IN AL, 50h; lấy dữ liệu từ PA
OUT 51h, AL; gửi tới PB
OUT 52h, AL; gửi tới PC
+ Ví dụ tiếp theo khởi tạo cho 8255A ở địa chỉ 78h, lấy dữ liệu từ PA gửi sang PB đồng
thời lấy dữ liệu từ PCL gửi sang PCH:
MOV AL, 83h; byte điều khiển PA – vào, PB – ra, PCL – vào và PCH – ra
OUT 7Bh, AL: đưa ra thanh ghi từ điều khiển
IN AL, 78h; lấy dữ liệu từ PA
OUT 79h, AL: đưa ra PB
IN AL, 7Ah; lấy dữ liệu từ PCL
MOV CL, 4; biến đếm có giá trị 4
SHL AL, CL; dịch trái AL 4 bit để chuyển các bit D0 -- D3 → D4 -- D7
OUT 7Ah, AL; đưa ra cổng PCH
Mode 1: Vào/ra với khả năng bắt tay
Một trong những điểm mạnh nhất của PPI 8255A khiến nó vẫn đang được
sử dụng phổ biến hiện nay là khả năng quản lý các tín hiệu bắt tay (Handshaking).
Bắt tay là phương thức trao đổi thông tin qua lại giữa các thiết bị thông minh. Một
ví dụ điển hình là quá trình truyền tin giữa PC và máy in (Printer): nếu PC đơn
thuần chỉ gửi dữ liệu đến cho máy in thì chưa đủ, máy in phải được thông báo về
sự tồn tại của dữ liệu đồng thời phải thông báo trạng thái của mình cho máy tính.
8255A trong chế độ 1 có khả năng quản lý tín hiệu bắt tay, ta mô tả sơ lược như
sau:
Chế độ 1 là chế độ áp dụng cho 2 cổng PA và PB (bằng cách ghi từ điều
khiển có tổ hợp MA1 MA0 = 01 hoặc MB = 1). Trong chế độ này, cổng PA và PB
có thể được lập trình là cổng vào hoặc ra (1 chiều) còn PC trở thành các tín hiệu

82
bắt tay (PCH dùng cho PA còn PCL dùng cho PB). Các tín hiệu bắt tay có thể kể
đến là:
* Nếu PA (PB) là cổng vào:
/STB (Stroble - chốt): là tín hiệu vào mức tích cực thấp. Khi thiết bị ngoại
vi đưa byte dữ liệu tới A (B) nó sẽ thông báo cho 8255 qua chân STB để chốt dữ
liệu vào thanh ghi bên trong. Thời gian tác động của /STB là hữu hạn và phụ thuộc
vào từng loại thiết bị ngoại vi.
IBFa (IBFb) (Input Buffer port A (B) Full - Bộ đệm vào đầy): là tín hiệu
ra tích cực cao. Để trả lời tín hiệu /STB, 8255A chốt vào thanh ghi bên trong các
dữ liệu tại PA (PB) và thông qua tín hiệu này để báo rằng dữ liệu đã được chốt
nhưng chưa được CPU đọc.
INTR (INTerrupt Request – Yêu cầu ngắt): là tín hiệu ra tích cực cao, hỗ
trợ cho hoạt động trao đổi thông tin với 8255A sử dụng cơ chế ngắt. Thường thì tín
hiệu này được nối đến đầu vào của một trong các vi mạch xử lý ngắt ưu tiên (sẽ xét
ở bài sau).
INTEa (INTEb) (INTerrupt Enable – Cho phép ngắt): là tín hiệu của
một mạch lật bên trong dùng để cho phép/cấm ngắt INTR
Từ trạng thái (Status word): Hỗ trợ cho việc trao đổi thông tin với 8255A
sử dụng cơ chế hỏi vòng. Trạng thái của các tín hiệu bắt tay được nhập từ cổng C
và được xem xét khi đọc cổng C.
* Nếu PA (PB) là cổng ra:
/OBFa (b) (Output Buffer port A (B) Full - Bộ đệm ra đầy): là tín hiệu có
mức tích cực thấp dùng để thông báo cho ngoại vi biết là CPU đã ghi byte dữ liệu
tới cổng A. Tín hiệu này thường được nối tới tín hiệu STROBE của thiết bị nhận
tin.
/ACKa (b) (ACKnowlege for port A (B) – báo nhận cổng A (B)): là tín
hiệu vào tích cực thấp để thông báo rằng thiết bị thu đã nhận được byte dữ liệu.
INTRa (b) (INTerrupt Request for port A (B) – Yêu cầu ngắt phục vụ
cổng A (B)): là tín hiệu ra tích cực cao dùng để hỗ trợ cho việc truyền thông tin

83
theo cơ chế ngắt. Tín hiệu này được kích hoạt bằng sườn lên của /ACK và thông
báo cho CPU biết thiết bị thu đã nhận xong byte dữ liệu cuối cùng.
INTEa (b) (INTerrupt Enable for port A (B) – Cho phép ngắt cổng A
(B)): là tín hiệu của một mạch lật bên trong dùng để cho phép/cấm ngắt INTR.
Từ trạng thái (Status): hỗ trợ cho việc giám sát trạng thái của các tín hiệu
bắt tay.
Mode 2: Vào/ra hai chiều với tín hiệu bắt tay
Để có thể truyền dữ liệu cả vào và ra qua cùng một cổng với khả năng bắt
tay. người ta sử dụng cổng A ở chế độ 2. Khi cổng A ở chế độ 2, cổng B có thể ở
chế độ 0 hoặc 1.
Mode BSR (Bit Set/Reset): Chế độ lập/xoá từng bit cho PC.
Đặc trưng mạnh nhất của cổng C là có khả năng điều khiển từng bit một.
Chế độ này cho phép đặt từng bit PC0 – PC7 lên cao hoặc xuống thấp và người ta
có thể sử dụng để thực hiện một số nhiệm vụ đặc thù.
6.2.4 Sử dụng PPI 8255A trong máy tính PC
Trong các máy tính IBM PC/XT và tương thích, 8255 là chip được sử dụng
đầu tiên cho việc xuất nhập dữ liệu đến các cổng. Máy tính PC/XT và tương thích
sử dụng IC 74LS138 để giải mã địa chỉ cổng. Trong các thế hệ máy tính này, ba
cổng của 8255 được lập trình để truy xuất độc lập. Cổng A được dùng cho hai mục
đích: cổng vào cho bàn phím và cổng vào cho chuyển mạch DIP. Chuyển mạch
DIP dùng để thông báo cho PC về các ngoại vi bổ sung như lượng RAM, loại màn
hình và số lượng ổ đĩa. Các thiết lập chuyển mạch DIP được BIOS đọc và lưu lại
thông tin này về sau không cần phải đọc lại. Sau đó, hệ thống sẽ sử dụng cổng A
để nhận dữ liệu từ bàn phím. Trong các thế hệ máy hiện nay, người ta không dùng
chuyển mạch để thiết lập cấu hình hệ thống như trên nữa. Thay vào đó, thông tin
cấu hình hệ thống được cất trong RAM CMOS với nguồn pin riêng (người ta còn
gọi đây là NV RAM – NonVolatile RAM). Vì vậy, cổng A chỉ được dùng để nhận
dữ liệu từ bàn phím. Cổng B được khởi tạo với vai trò cổng ra với mỗi bit của nó
mang một ý nghĩa riêng, dùng để điều khiển nhiều thiết bị khác nhau như bộ

84
Timer, loa hệ thống, kiểm tra Parity trong RAM, ... Cổng C được khởi tạo là cổng
vào đa chức năng dùng để kiểm tra và nhận một số thông tin từ hệ thống.
Cũng cần phải nói thêm rằng, hiện nay, vi mạch 8255A cũng không còn
được sử dụng độc lập trên bảng mạch do người ta đưa vào bên trong mạch tích hợp
hỗ trợ (Chipset) cùng với nhiều vi mạch khác như mạch điều khiển ngắt, mạch
điều khiển kênh, mạch định thời, ...

Bài 7: HOẠT ĐỘNG NGẮT VÀ TÀI NGUYÊN NGẮT CỦA MÁY TÍNH

85
Trong máy tính PC có hai cơ chế được dùng để hỗ trợ cho hoạt động điều
khiển các thiết bị khác nhau. Đó là cơ chế hỏi vòng và cơ chế ngắt.
Hỏi vòng là một cơ chế đồng bộ, được thực hiện tại những khoảng thời gian
nhất định (thường được gọi là “Khe thời gian – Time Slot”) trong các chu kỳ làm
việc của CPU. Trong các khe thời gian đó, CPU kiểm tra những thiết bị cần thiết
(thường thì những thiết bị này cũng được chế tạo để phù hợp với cơ chế hỏi vòng)
để xử lý hoặc đưa ra những yêu cầu đối với thiết bị.
Tuy nhiên, đại đa số các yêu cầu từ phía thiết bị lại là các yêu cầu không
đồng bộ, nghĩa là thời điểm xuất hiện không được biết trước. Để tránh mất thông
tin, và nguy hại hơn là mất đồng bộ hệ thống, CPU được trang bị một cơ chế đáp
ứng không đồng bộ đối với mọi thiết bị ngoại vi – đó là cơ chế ngắt.
7.1 Định nghĩa và phân loại ngắt
7.1.1 Định nghĩa:
Cơ chế ngắt là một hoạt động đặc biệt được trang bị cho bộ vi xử lý nhằm
đáp ứng một cách mềm dẻo và linh hoạt các yêu cầu không đồng bộ từ thiết bị
ngoại vi theo cách thức: Bộ vi xử lý tiến hành công việc chính của mình, chỉ khi
nào xuất hiện yêu cầu từ phía thiết bị ngoại vi thì bộ vi xử lý mới tạm dừng công
việc hiện tại để phục vụ việc trao đổi dữ liệu với ngoại vi đó. Sau khi hoàn thành
việc trao đổi dữ liệu, bộ vi xử lý quay trở về thực hiện tiếp công việc đã bị gián
đoạn. Có thể mô tả hoạt động ngắt một cách đơn giản như hình vẽ sau:

PORT

Thiết bị
Máy tính PC
ngoại vi
Tín hiệu yêu cầu ngắt

Hình 7.1: Mô tả đơn giản hoạt động ngắt

7.2.2 Phân loại ngắt


a. Ngắt mềm

86
Ngắt mềm là ngắt được gọi bằng một lệnh ở trong chương trình ngôn ngữ
máy. Lệnh đó là INT mn (trong đó INT là mã lệnh, mn là số hiệu ngắt). Các ngắt
mềm cho phép gọi trực tiếp các chương trình con phục vụ ngắt chứa trong thư viện
chương trình. Nói cách khác, lệnh ngắt mềm bản chất là một lệnh gọi chương trình
con đặc biệt, nó được gọi một cách chủ động bằng chương trình của người lập
trình.
b. Ngắt cứng
Là các yêu cầu ngắt CPU do các tín hiệu đưa đến từ các chân INTR và NMI.
Khác với ngắt mềm, ngắt cứng không được khởi động bởi chương trình mà bởi các
thành phần có trong phần cứng của hệ vi xử lý (các thiết bị ngoại vi bên trong và
bên ngoài). Loại ngắt này là một cơ cấu đơn giản và hiệu quả để bộ vi xử lý phản
ứng kịp thời với các sự kiện không đồng bộ xảy ra trong hệ vi xử lý.
Ví dụ minh hoạ đơn giản là hoạt động của ngắt bàn phím. Mỗi khi ấn hay nhả một phím
thì ngắt bàn phím sẽ được kích hoạt. Chương trình xử lý ngắt bàn phím sẽ được khởi động bằng
cách chuyển ký tự được ấn vào vùng bộ đệm của bàn phím, xếp ngay sau ký tự được ấn lần
trước. Cũng như mọi ngắt khác, việc thực hiện chương trình chính sẽ được khôi phục ngay sau
khi chương trình con xử lý ngắt bàn phím kết thúc.
Ngắt cứng thường được chia ra thành ngắt che được (Maskable Interruption)
và ngắt không che được (NonMaskable Interruption).
Ngắt che được là tất cả các yêu cầu ngắt được đưa tới chân INTR của CPU.
CPU có thể cấm (che)/phục vụ các ngắt này phụ thuộc vào giá trị của cờ ngắt IF
(IF = 0 - cấm, IF = 1 - cho phép). Các lệnh Assembly như CLI (xoá cờ ngắt) và
STI (thiết lập cờ ngắt) sẽ tác động đến cờ này. Khi một ngắt bị che, thì mặc dù
được gọi, chương trình con phục vụ ngắt tương ứng cũng không được thực hiện.
Ngắt không che được là tất cả các yêu cầu ngắt được đưa tới chân NMI của
CPU. Các ngắt này luôn được phục vụ bất chấp giá trị của cờ IF. Chương trình con
phục vụ ngắt loại này thường là các chương trình có chức năng thông báo các sự
kiện quan trọng nhất của hệ thống như sự cố nguồn nuôi, sự cố thời gian thực,...
Ngoài ra, ngắt cứng còn có thể được phân ra thành ngắt trong và ngắt ngoài.
Ngắt trong (ngắt nội bộ) được kích hoạt bởi các phần cứng có ngay trên bảng mạch

87
(như các IC hỗ trợ) còn ngắt ngoài được kích hoạt từ các thiết bị bên ngoài hệ
(được kết nối với hệ thông qua các cổng).
7.1.3 Hoạt động chung của ngắt
CPU xử lý ngắt (cứng và mềm) thông qua các bước sau:
1. Cất thanh ghi cờ (FR) vào ngăn xếp và giảm SP đi 2 đơn vị (vì thanh ghi
cờ là thanh ghi 2 byte)
2. Xoá cả hai cờ cho phép ngắt IF và cờ bẫy TF. Khi đó sẽ che các yêu cầu
ngắt khác đưa đến chân INTR và huỷ bỏ chế độ chạy từng lệnh trong khi CPU thực
hiện CTCPVN. Tuỳ thuộc vào chế độ ngắt mà người lập trình có thể huỷ bỏ việc
che chân INTR bằng lệnh STI.
3. Cất CS hiện hành vào ngăn xếp và giảm SP đi 2 đơn vị.
4. Cất IP hiện hành vào ngăn xếp và giảm SP đi 2 đơn vị.
5. Thực hiện truy cập vào bảng vector ngắt bằng cách xác định địa chỉ vật lý
của vector ngắt thông qua số hiệu ngắt tương ứng, qua đó cập nhật giá trị CS và IP
mới của CTCPVN.
6. Với cặp CS:IP mới, CPU bắt đầu nhận và thực hiện các lệnh của
CTCPVN.
7. Lệnh cuối cùng của CTCPVN là lệnh IRET. Lệnh này thông báo để CPU
tải lại giá trị IP, CS và thanh ghi cờ từ ngăn xếp và nhờ vậy, CPU có thể thực hiện
tiếp chương trình tại nơi nó bị ngắt.
7.2 Tài nguyên ngắt của máy tính
Để hỗ trợ cho hoạt động ngắt của máy tính, người ta trang bị cho nó một hệ
thống các chương trình con phục vụ ngắt (CTCPVN). Mỗi một ngắt (kể cả ngắt
cứng và ngắt mềm) đều có một CTCPVN tương ứng. Tổng số ngắt cứng và ngắt
mềm có thể có trong một hệ máy tính PC là 256 ngắt. Các ngắt này lần lượt được
gán cho các số hiệu từ 00h đến FFh. Mỗi khi một ngắt có số hiệu N kích hoạt,
CTCPVN ứng với nó sẽ được gọi. CPU sẽ thực hiện chương trình này tại điểm vào
của nó được xác định bởi cặp con trỏ chương trình CS:IP. Cặp địa chỉ này (có tính
chất như một vector) được chứa tại một vùng nhớ đặc biệt được gọi là bảng vector
ngắt. Thường thì máy tính PC được cài đặt sẵn cỡ khoảng hơn 20 CTCPVN, số

88
còn lại do các lập trình viên cài đặt phụ thuộc vào mục đích sử dụng. Toàn bộ các
CTCPVN cùng với bảng vector ngắt hợp thành “tài nguyên ngắt của máy tính”
(hay còn gọi là “tài nguyên phần mềm của máy tính”) với ý nghĩa ngoài việc được
sử dụng như là công cụ hỗ trợ cho máy tính thì chúng còn được con người khai
thác trong nhiều kỹ thuật lập trình hệ thống chuyên sâu khác nhau (như chặn bắt
ngắt, đánh tráo ngắt,...).
7.2.1 Bảng vector ngắt
Intel quy định bảng vector ngắt là một vùng nhớ có dung lượng 1KB hoặc
2KB (phụ thuộc vào thế hệ bộ vi xử lý) nằm trong bộ nhớ trung tâm có địa chỉ bắt
đầu từ 0000:0000h (vì có tất cả 256 ngắt, mỗi vector ngắt lại có tối thiểu 4byte để
chứa địa chỉ đầy đủ cho CS:IP của CTCPVN tương ứng). Theo quy ước đó, ví dụ
đối với 80286, nếu đi từ địa chỉ thấp nhất, mỗi vector ngắt gồm 4 byte, hai byte có
địa chỉ thấp dùng để chứa giá trị IP, hai byte tiếp theo dùng để chứa giá trị CS. Do
vậy, từ số hiệu ngắt N cho trước, CPU dễ dàng xác định địa chỉ của vector ngắt
trong bảng vector ngắt:
(IP)N = N*4 còn (CS)N = N*4 + 2.

03FEh – 03FFh Chứa địa chỉ CS của CTCPVN FFh


03FCh – 03FDh Chứa địa chỉ IP của CTCPVN FFh

0082h – 0083h Chứa địa chỉ CS của CTCPVN 20h


0080h – 0081h Chứa địa chỉ IP của CTCPVN 20h

000Ah – 000Bh Chứa địa chỉ CS của CTCPVN 02h


0008h – 0009h Chứa địa chỉ IP của CTCPVN 02h
0006h – 0007h Chứa địa chỉ CS của CTCPVN 01h
0004h – 0005h Chứa địa chỉ IP của CTCPVN 01h
0002h – 0003h Chứa địa chỉ CS của CTCPVN 00h
0000h – 0001h Chứa địa chỉ IP của CTCPVN 00h

89
Hình 7.2: Cấu trúc của bảng vector ngắt
7.2.2 Các chương trình con phục vụ ngắt có sẵn trong PC
Các máy tính PC hiện nay thường được thiết kế để hỗ trợ tối đa cho các lập
trình viên hệ thống. Vì vậy, trong số 256 ngắt được phân bổ cho máy tính, có một
số ngắt đã được cài đặt sẵn CTCPVN và khi cần, có thể được sử dụng cho nhiều
mục đích khác nhau. Ta điểm qua một số ngắt được hỗ trợ từ những thế hệ PC đầu
tiên cho đến nay:
INT 00h (lỗi phép chia cho 0): Ngắt này thuộc nhóm ngắt ngoại lệ
(Exception Interrupts). Chúng được bộ vi xử lý kích hoạt mỗi khi có những điều
kiện mà CPU không có khả năng xử lý được, ví dụ như phép chia cho 0. Thông
thường, CTCPVN phục vụ ngắt này sẽ đưa ra một thông báo (Message) về lỗi phép
chia cho 0 (CPU không thể đưa ra kết quả). Ngoài ra, INT 00h cũng bị kích hoạt
trong trường hợp nếu thương số quá lớn so với thanh ghi lưu kết quả của lệnh chia
(DIV).
INT 01h (chạy từng lệnh): Trong quá trình thực hiện chương trình, thường
có nhu cầu kiểm tra nội dung ác thanh ghi của CPU và bộ nhớ hệ thống. Vấn đề
này được giải quyết bằng cách cho chương trình chạy từng lệnh một, sau mỗi lệnh
lại kiểm tra các thanh ghi và các byte nhớ. Intel thiết kế riêng INT 01h phục vụ cho
quá trình này. Để bắt đầu, phải đặt cờ bẫy TF (bit D8 trong thanh ghi cờ) lên 1. Sau
đó, cứ mỗi một lệnh thực hiện xong thì CPU sẽ gọi CTCPVN INT 01h để hiển thị
nội dung các thanh ghi lên màn hình.
Cờ bẫy TF được đặt và xoá thông qua ngăn xếp (không có lệnh đặt xoá trực tiếp như IF).
Ví dụ sau đây sẽ thực hiện xoá cờ bẫy TF thông qua ngăn xếp:
PUSHF ; cất giá trị thanh ghi cờ
POP AX ; lấy giá trị thanh ghi cờ đưa vào AX
AND AX, 0FEFFh ; xoá bit D8
PUSH AX ; lưu lại vào vị trí cũ
POPF ; đưa vào thanh ghi cờ
Bằng cách thay lệnh AND bằng lệnh OR, ta có thể đặt cờ TF lên 1.
INT 02h (Ngắt không che được NMI): Tất cả các bộ vi xử lý của Intel đều
có tín hiệu NMI – là tín hiệu vào mức tích cực cao dùng để báo hiệu các ngắt cứng

90
không che được. Mỗi khi chân này được kích hoạt, CPU luôn luôn gọi CTCPVN
INT 02h để thực hiện.
INT 03h (Điểm dừng – Break): Intel sử dụng INT 03h để thực hiện các
điểm dừng. Trong chế độ chạy từng bước, thông qua ngắt này có thể giám sát được
CPU và bộ nhớ hệ thống sau từng lệnh được thực hiện. Ở các thế hệ máy gần đây,
các chương trình gỡ rối (Debug) mạnh còn sử dụng cả INT 01h và INT 03h.
INT 04h (Tràn số có dấu): Lệnh này được kích hoạt khi xảy ra tràn số có
dấu. Có một lệnh Assembly tương ứng là INTO (Ngắt khi có tràn – INTerrupt if
Overflow). Nếu lệnh INTO đưocự đặt ngay sau phép toán logic hay số học đối với
các số có dấu như IMUL, ADD, IDIV thì CPU sẽ kích hoạt INT 04h nếu cờ OF =
1. Khi OF = 0, lệnh INTO không được thực hiện mà bị bỏ qua và có ý nghĩa như
lệnh NOP (No OPeration).
Xét ví dụ sau:
MOV AL, Data_1
MOV BL, Data_2
ADD AL, BL
INTO
Giả sử trong chương trình trên, Data_1 = +64 = 01000000 và Data_2 = +64 = 01000000.
Lệnh INTO được thực hiện và CPU nhảy đến địa chỉ vật lý 00010h là vị trí vector ngắt của INT
04h. Phép cộng trên có nhớ từ D6 sang D7 làm cờ tràn chuyển lên 1 và kết quả không phải là
+128 như mong đợi.
Cần phải nhắc lại rằng, trong số 256 ngắt khả dụng của CPU, một số được
thiết bị ngoại vi sử dụng, một số được hệ điều hành (MS DOS và cao hơn) sử
dụng, số còn lại dành cho người lập trình. Chi tiết các ngắt dùng trong IBM PC
được giới thiệu trong các tài liệu thuyết minh kỹ thuật đối với từng thế hệ máy.
7.3 Ngắt ưu tiên và xử lý ngắt ưu tiên
7.3.1 Ngắt ưu tiên
Nếu tại một thời điểm cùng có nhiều yêu cầu ngắt khác nhau cùng đòi hỏi
bộ vi xử lý phục vụ thì bộ vi xử lý sẽ xử lý như thế nào? Trong trường hợp như
vậy, bộ vi xử lý sẽ thực hiện gán các mức ưu tiên cho các yêu cầu ngắt và xử lý các
yêu cầu ngắt đó theo nguyên tắc:

91
- Nếu có nhiều yêu cầu ngắt cùng tác động thì CPU sẽ phục vụ yêu cầu
ngắt nào có mức ưu tiên cao nhất hiện hành trước, sau đó mới đến các yêu cầu ngắt
khác theo thứ tự giảm dần mức ưu tiên.
- Trong thời gian phục vụ một yêu cầu ngắt, nếu có yêu cầu ngắt khác với
mức ưu tiên cao hơn kích hoạt thì tạm dừng phục vụ yêu cầu này để chuyển sang
phục vụ yêu cầu có mức ưu tiên cao hơn.
Cũng cần nói thêm rằng, ngay trong cấu trúc phần cứng của bộ vi xử lý đã
quy định mức ưu tiên khác nhau như đầu vào ngắt NMI có mức ưu tiên cao hơn
đầu vào INTR.
Để có thể xử lý ngắt theo nguyên tắc trên, máy tính IBM PC được trang bị
một cơ cấu phần cứng đặc biệt – đó là vi mạch điều khiển ngắt ưu tiên PIC 8259A
(PIC – Priority Interrupt Controller).
7.3.2 Vi mạch điều khiển ngắt ưu tiên PIC 8259A
Vi mạch điều khiển ngắt ưu tiên được chế tạo để phục vụ cho việc mở rộng
các đầu vào ngắt để đáp ứng nhu cầu mở rộng số lượng ngắt khi có nhiều thiết bị
ngoại vi được ghép nối và làm việc theo cơ chế ngắt, đồng thời đảm bảo nguyên
tắc xử lý ngắt ưu tiên đã đề cập ở trên. Cấu trúc, phương pháp ghép nối và điều
khiển các PIC 8259A riêng lẻ được đề cập chi tiết trong các giáo trình “Kỹ thuật vi
xử lý”. Trong máy tính PC hiện nay, PIC 8259A được tích hợp ngay bên trong bộ
vi mạch hỗ trợ (Chipset). Vì vậy, trong mục này chỉ giới thiệu sơ lược về cấu trúc
của PIC 8259A, thông qua đó trình bày hoạt động hoàn chỉnh của một ngắt cứng
có sự trợ giúp của PIC.

92
Cấu trúc phần cứng của một PIC có dạng như hình vẽ sau:

Tới kênh thông


tin của hệ thống

Data /INTA INT


Buffer Khối logic điều khiển

/RD IR0
/WR Điều
khiển IR1
A0
/CS đọc ghi ISR PR IRR
IR7

CAS0
Điều IMR
CAS1
khiển
CAS2 nối tầng
Các thiết bị ngoại vi đưa yêu cầu
SP/EN qua các đầu vào IR0 -- IR7 này.

Hình 7.3: Sơ đồ cấu trúc của vi mạch điều khiển ngắt ưu tiên PIC 8259A
Các chân tín hiệu của PIC 8259A bao gồm:
IR0 -- IR7 (Interrupt Request): Các đầu vào tín hiệu yêu cầu ngắt.
SP/EN (Slave Program/ENable Buffer): Lập trình cho PIC ở chế độ thợ
(Slave)/Mở đệm bus dữ liệu. Khi PIC làm việc ở chế độ không có đệm bus dữ liệu
thì đây là tín hiệu vào dùng để lập trình biến PIC đó thành mạch thợ (SP = 0) hoặc
mạch chủ (SP = 1). Khi PIC làm việc với đệm dữ liệu thì chân này là tín hiệu ra
EN dùng để mở đệm bus PIC thông vào bus dữ liệu hệ thống.
CAS0 -- CAS2 (Cascades): Tín hiệu nối tầng giữa các PIC với nhau theo mô
hình chủ/thợ (Master/Slave) để tăng thêm số lượng đầu vào yêu cầu ngắt cần xử lý.
A0: Là tín hiệu địa chỉ dùng để lựa chọn 2 thanh ghi bên trong (thanh ghi
chẵn và thanh ghi lẻ) để đưa các từ lệnh khởi tạo và điều khiển hoạt động đến PIC.
/CS: Là tín hiệu chọn chip.

93
/RD và /WR: Là các tín hiệu điều khiển đọc ghi, thường được ghép với các
tín hiệu /IORD và /IOWR của kênh hệ thống.
INT: Là tín hiệu yêu cầu ngắt gửi đến chân INTR của CPU.
/INTA: Là tín hiệu báo nhận ngắt, được nối tới tín hiệu /INTA của CPU.
Các khổi chức năng bên trong của PIC 8259A:
IRR (Interrupt Request Register) – Thanh ghi chứa yêu cầu ngắt: Ghi nhớ
các yêu cầu ngắt có tại đầu vào IRi. Bất cứ ngoại vi nào có yêu cầu ngắt (trường
hợp cực đại là cả 8 đầu vào đều có yêu cầu) sẽ được thanh ghi này ghi nhận.
ISR (Interrupt Serviced Register) – Thanh ghi yêu cầu ngắt đang được phục
vụ: Ghi nhớ yêu cầu ngắt đang được phục vụ trong số các yêu cầu ngắt IRi trong
mạch.
IMR (Interrupt Mask Register) – Thanh ghi mặt nạ ngắt: Ghi nhớ mặt nạ
ngắt đối với các yêu cẩu ngắt IRi.
PR (Priority Resolve) – Khối giải quyết ưu tiên: Thực hiện kiểm tra mức ưu
tiên của yêu cầu ngắt tác động và xử lý ngắt ưu tiên theo nguyên tắc đã xét ở trên.
Khối logic điều khiển: Có nhiệm vụ gửi yêu cầu ngắt tới CPU qua INTR khi
có tín hiệu tại các chân IRi và nhận tín hiệu /INTA từ phía CPU rồi điều khiển quá
trình đưa số hiệu ngắt lên kênh dữ liệu.
Đệm kênh dữ liệu (Data Buffer): Dùng để phối ghép PIC với kênh dữ liệu hệ
thống.
Khối điều khiển đọc ghi: Dùng cho việc đưa các từ điều khiển ra cho PIC và
đọc các từ trạng thái của PIC.
Khối điều khiển nối tầng: Ghi nhớ và so sánh số hiệu của các mạch PIC có
mặt trong hệ thống.
Điều khiển hoạt động của PIC 8259A:
Để mạch PIC 8259A có thể hoạt động được theo yêu cầu, sau khi bật nguồn
cấp điện, PIC cần phải được lập trình bằng cách ghi vào thanh ghi (được quản lý
như cổng vào/ra) bên trong nó các từ mã điều khiển khởi tạo (ICW – Initial
Control Word) và tiếp theo đó là các từ mã điều khiển hoạt động (OCW –
Operation Control Word).

94
Các từ điều khiển khởi tạo dùng để tạo nên các chế độ (Mode) làm việc cơ
bản cho PIC còn các từ mã điều khiển hoạt động sẽ quyết định cách thức làm việc
cụ thể của PIC. Từ điều khiển hoạt động sẽ được ghi khi ta muốn thay đổi hoạt
động của PIC.
7.3.3 Hoạt động ngắt có sự hỗ trợ của PIC 8259A
1. Khi có yêu cầu ngắt từ thiết bị ngoại vi tác động vào một trong các chân
IRi của PIC 8259A thì PIC sẽ đưa tín hiệu INT = 1 (trong trường hợp đầu vào đó
không bị che bởi IMR) đến chân INTR của bộ vi xử lý.
2. Bộ vi xử lý đưa ra xung /INTA thứ nhất đến đầu vào /INTA của PIC
8259A.
3. PIC 8259A dùng xung /INTA thứ nhất đó như là thông báo để hoàn tất
các xử lý nội cần thết kể cả xử lý ưu tiên nếu có nhiều yêu cầu ngắt cùng xảy ra.
4. Bộ vi xử lý đưa ra xung /INTA thứ hai đến PIC 8259A.
5. Xung /INTA thứ hai buộc PIC đưa ra kênh dữ liệu byte chứa thông tin về
số hiệu ngắt của yêu cầu ngắt vừa được nhận biết.
6. Bộ vi xử lý dùng sô hiệu ngắt để tính ra địa chỉ vector ngắt trong bảng
vector ngắt.
7. Bộ vi xử lý lưu trữ thanh ghi cờ vào ngăn xếp, xoá các cờ IF và TF, sau
đó lưu trữ địa chỉ trở về CS:IP vào ngăn xếp.
8. Bộ vi xử lý gán địa chỉ CS:IP của chương trình con phục vụ ngắt từ bảng
vector ngắt và thực hiện chương trình đó.

Bài 8: HOẠT ĐỘNG TRUYỀN TIN NỐI TIẾP CỦA MÁY TÍNH

Máy tính PC và mạng máy tính PC là những phương tiện quan trọng trong
quá trình xử lí thông tin, xây dựng các phần mềm điều khiển và tổ chức truyền
thông tin đi xa . . . Bản chất máy tính PC là một bộ vi xử lý đa năng, ngoài chức

95
năng được ấn định nó còn được bổ xung một loạt về cấu hình để có thể thực hiện
một loạt các thao tác để biến nó thành một hệ thống phục vụ cho những bài toán cụ
thể đặt ra, tuỳ theo yêu cầu của người tổ chức điều khiển. Thông qua máy tính và
những thiết bị phụ trợ, việc xử lí thông tin và truyền tin tức trở nên thuận tiện hơn,
nhanh hơn, đáp ứng được các yêu cầu cần thiết và ứng dụng rộng rãi trong truyền
thông.
8.1 Cơ sở truyền tin nối tiếp của PC
8.1.1 Các phương thức truyền tin trong PC
Máy tính truyền số liệu bằng hai phương pháp: truyền nối tiếp và truyền
song song.
Truyền số liệu song song: Là phương pháp truyền số liệu mà sử dụng số
đường dây bằng với số bit truyền mỗi lần, mỗi đường dây sẽ đảm nhận truyền một
bit số liệu. Truyền song song có ưu điểm là tốc độ truyền cao, tín hiệu được truyền
một cách trực tiếp giúp cho việc thu và phát tín hiệu đơn giản hơn, nó được ứng
dụng rất rộng rãi trong việc truyền số liệu ở Bus nội bộ máy tính và truyền dữ liệu
giữa máy tính với ổ đĩa, máy in...
Nhưng truyền song song chỉ thuận lợi khi truyền ở cự li ngắn, do việc sử
dụng nhiều đường dây để truyền đi xa sẽ rất tốn kém và dễ bị ảnh hưởng lẫn nhau
của nhiễu giữa các dây.
Truyền số liệu nối tiếp: Là phương pháp truyền số liệu từng bit một trên
một đường dây. Với phương pháp truyền nối tiếp, tín hiệu không thể truyền đơn
giản mà phải được chuyển đổi từ dạng song song sang nối tiếp nhờ các thanh ghi
dịch, sau đó truyền ra đường dữ liệu. Bên phía thu cũng phải có thanh ghi dịch để
nhận tín hiệu và đưa dạng nối tiếp về song song. Việc truyền tín hiệu nối tiếp trong
khoảng cách ngắn không cần đến điều chế tín hiệu, nhưng để thông tin truyền được
đi xa thì việc điều chế tín hiệu là hết sức quan trọng, và một trong những hình thức
để truyền số liệu nối tiếp đi xa là sử dụng MODEM để điều chế tín hiệu sang dải
âm tần hình sin và truyền trên đường điện thoại.
Truyền số liệu nối tiếp có ưu điểm rất lớn là truyền được ở cự li rất xa và rất
thuận tiện khi sử dụng đường truyền của mạng viễn thông, mặt khác nó lại có khả

96
năng chống nhiễu tốt, giá thành lại hạ do chỉ cần dùng một đường dây để truyền.
Song tốc độ truyền nối tiếp rõ ràng không nhanh bằng truyền song song, việc tổ
chức chuyển từ các bit song song sang nối tiếp và ngược lại đòi hỏi khá phức tạp,
việc sử dụng điều chế và giải điều chế tín hiệu cũng ảnh hưởng nhiều đến tốc độ
truyền.
Với những ưu điểm của mình, cộng với khả năng tận dụng tốt hệ thống
thông tin cơ sở mà truyền tin nối tiếp ngày càng được ứng dụng rộng rãi, đặc biệt
là trong lĩnh vực Internet.
8.1.2 Các phương pháp truyền tin nối tiếp của PC
Máy tính truyền số liệu nối tiếp theo hai phương pháp: Truyền đồng bộ và
truyền không đồng bộ.
Phương pháp truyền tin không đồng bộ:
Trong phương pháp truyền tín hiệu không đồng bộ (Asynchronous
Communication) thì các nhóm bit (tương ứng các ký hiệu) được truyền đi theo một
khung tin độc lập, mỗi khung tin được bắt đầu và kết thúc bằng các bit đặc biệt
(Bit Start và Bit Stop) với mục đích tạo đồng bộ giữa bên thu và bên phát. Thời
điểm bắt đầu truyền các nhóm bit là bất kỳ và độc lập nhau. Bit Start luôn phải là
0. Bit Stop có thể là 1 bit, 1 + 1/2 bit hoặc 2 bit với giá trị luôn phải là 1. Bit Parity
có thể được cài vào để thực hiện phát hiện sai sơ bộ cho bên thu. Tuỳ theo loại mã
sử dụng mà số lượng bit trong khung tin có thể là 5, 6, 7 hay 8. Ở một số hệ thống,
nhằm tăng khả năng bảo toàn của dữ liệu, người ta còn thêm vào khung dữ liệu bit
bậc (hay còn gọi là các bit chẵn lẻ). Bit bậc có thể là bậc chẵn hoặc lẻ. Bit bậc lẻ có
tổng các số 1 của các bit dữ liệu cùng với bit bậc là lẻ, tương tự các bit bậc chẵn là
khi tổng các số 1 của các bit dữ liệu và bit bậc là chẵn.
Ưu điểm của phương pháp này là yêu cầu đồng bộ giữa thu và phát không
đòi hỏi chặt chẽ nhờ có bit Start và bit Stop xác định thời điểm đầu và cuối của
nhóm bit cho nên sự sai pha tích luỹ chỉ diễn ra trong thời gian thu nhóm bit đó.
Chính điều đó dẫn đến ưu điểm là thiết bị trong hệ thống khá đơn giản, giá thành
hệ thống thấp.

Bit Start Bit Parity Bit Stop


97
Bit Bit Bit Bit Bit Bit Bit Bit
1 2 3 4 5 6 7 8

Nhược điểm của phương pháp truyền không đồng bộ là hiệu quả sử dụng
kênh thấp do phải truyền nhiều bit Start và bit Stop là những bit không mang tin.
Mặt khác tốc độ truyền tin cũng bị hạn chế. Các Modem có tốc độ không lớn hơn
1200 bit/s thường sử dụng phương pháp này.
Phương pháp truyền tin đồng bộ:
Phương pháp truyền tín hiệu đồng bộ (Synchronous Communication) khắc
phục được các nhược điểm của phương pháp không đồng bộ. Bản chất của phương
pháp này là các tín hiệu số được gửi đi một cách liên tục với tốc độ không đổi.
Trong trường hợp này, thiết bị thu đầu cuối cần phải tạo ra và duy trì tần số nhịp
đồng bộ với tín hiệu số đầu vào (tức là đồng bộ với tần số nhịp bên phát) trong
suốt thời gian làm việc. ở phương pháp này, từng khối gồm nhiều byte được định
khung giữa các mã điều khiển và sau đó mới được truyền đi. Tuỳ vào giao thức
(Protocol) khác nhau mà mã điều khiển cũng khác nhau. Có 2 giao thức đồng bộ
chuẩn được sử dụng rộng rãi đó là BISYNC và SDLC.

SYN SYN SOH HEADER STX TEXT ETX BCC

Khuôn dạng khối tin của giao thức BISYNC


(Binary Synchronous Communication)
Trường Kiểm tra 01111110
01111110 Trường địa Trường
điều khiển khung 16 Cờ kết
Cờ bắt đầu chỉ 8 bit thông tin
8 bit bit thúc
Khuôn dạng khối tin của giao thức SDLC (Serial Data Link Control)
Đối với giao thức BISYNC không có các bit khởi động và bit dừng, thay vào
đó ở mỗi khối dữ liệu có một hoặc một vài byte gọi là các ký tự đồng bộ. Độ lớn
của khối tin BISYNC có thể lên tới hàng ngàn byte.
SYN: Ký tự đồng bộ. Sau khi phát hiện hai ký tự đặc biệt dùng làm tín hiệu
đồng bộ đã biết trước, thiết bị thu bắt đầu ghi nhận ký tự SOH.

98
SOH (Start Of Header): là byte mở đầu, xác định kích thước và các đặc tính
của trường Header.
HEADER: Trường này có độ dài thay đổi, có thể dùng để chứa địa chỉ nơi
nhận tin.
STX (Start of Text): chỉ ra rằng ngay sau byte này là phần bắt đầu của văn
bản.
TEXT: Trường này có độ dài thay đổi, chứa đựng các ký tự mã ASCII hoặc
nội dung tin tức cần truyền.
ETX (End of Text) là byte đánh dấu sự kết thúc của khối tin văn bản.
BCC (Block Check Character) là khối tổng kiểm tra dùng để phát hiện lỗi.
Với giao thức SDLC, là một giao thức truyền đồng bộ do IBM đề xuất và
được sử dụng rộng rãi trong một số mạng máy tính. Giao thức này chuyển byte
01111110 thay cho byte SYN và được xem là byte cờ. Tiếp theo byte cờ là byte
chứa địa chỉ đích trên mạng, nơi chứa dữ liệu được gửi trên mạng máy tính. Tiếp
theo là byte điều khiển trong đó có thông tin về trình tự dữ liệu. Tiếp theo là dữ
liệu, ở đây là các bit, trường dữ liệu của giao thức SDLC tới hàng ngàn bit và có
thể đạt tới 200.000 bit/khung. Tiếp theo là trường 16 bit để kiểm tra lỗi và cuối
cùng là byte cờ để chỉ thị kết thúc khung dữ liệu.
8.1.3 Truyền số liệu qua mạng điện thoại và hệ thống thông tin vô tuyến:
Mạng điện thoại công cộng (Public Telephone Network) là hệ thống thông
tin được ứng dụng rộng rãi nhất với qui mô lớn ở mọi quốc gia. Chức năng chính
của nó là đảm bảo kết nối và truyền dẫn các cuộc thoại ở các phạm vi khác nhau.
Việc ứng dụng rộng rãi các hệ thống vi xử lý trong mọi lĩnh vực đời sống,
kinh tế đặt ra một vấn đề bức thiết là tổ chức hệ thống thông tin số với các qui mô

M¹ng ®iÖn
MODEM tho¹i MODEM
Telephone
Network
DTE DTE

MODEM MODEM
R/T R/T
99
DTE: thiÕt bÞ R/T: ThiÕt bÞ thu
®Çu cuèi sè ph¸t v« tuyÕn
khác nhau. Đối với các hệ thống thu phát thông tin hiện nay, phương án thông
dụng nhất là sử dụng chính mạng điện thoại công cộng và các máy thông tin vô
tuyến (ở đây là các máy thông tin sóng ngắn và cực ngắn) với các thiết bị ghép nối
thích hợp đó là MODEM.

Hình 8.1: Truyền số liệu qua mạng điện thoại và mạng thông tin vô tuyến
MODEM với chức năng phối hợp biến đổi dạng tín hiệu số thành dạng tín
hiệu tương tự phù hợp với kênh thoại khi truyền tin và biến đổi ngược lại khi nhận
tin, hai quá trình đó là điều chế và giải điều chế (Modulation – Demodulation gọi
tắt là MODEM). MODEM đảm bảo việc truyền dẫn số liệu nên người ta thường
gọi là thiết bị truyền dẫn số liệu (Data Communication Equipment – DCE). Tuỳ
theo thuật toán làm việc và mức độ thông minh của MODEM mà tốc độ truyền tin
cũng như chất lượng thông tin có thể cải thiện được rất nhiều. MODEM có thể cắm
bên trong trực tiếp vào các khe cắm của máy (khe PCI chẳng hạn) hay bên ngoài
máy tính qua cổng COM với chuẩn RS232. Với nội dung đề tài này ta chỉ xét với
MODEM ngoài thông qua cổng COM của PC.
Các MODEM có các phương thức cho truyền song công, đơn công, không
đồng bộ, đồng bộ. Cùng một MODEM có thể chuyển đổi được các tốc độ khác
nhau. Các MODEM thông dụng hiện nay thường có tốc độ 56Kb/s.

8.1.4 Tổ chức đường truyền tín hiệu nối tiếp qua cổng COM của PC
Để tổ chức đường truyền nối tiếp với hệ vi xử lý và để giảm tối đa các mạch
phụ thêm bên ngoài, công nghệ vi điện tử đã chế tạo ra các vi mạch tổ hợp cỡ lớn
lập trình được, có khả năng thực hiện phần lớn các chức năng truyền dẫn và phối
ghép với hệ vi xử lý. Đó là mạch thu phát dị bộ vạn năng UART (Universal
Asynchronous Receiver Transmitter) 8250(16450) và mạch thu phát đồng bộ – dị
bộ vạn năng USART (Universal Synchronous and Asynchronous and Receiver
Transmitter) 8251.
Với các mạch phối ghép như trên, việc truyền tin sẽ được thực hiện nhờ một
UART (USART) ở đầu phát và một UART (USART) khác ở đầu thu. Khi có kí tự

100
để phát 8250 (8251) tạo ra khung cho ký tự bằng cách gắn thêm vào mã ký tự các
bit Start và bit Stop rồi gửi liên tiếp từng bit ra đường truyền. Bên phía thu, một
8250 (8251) khác sẽ nhận ký tự, tháo bỏ khung, kiểm tra Parity rồi chuyển sang
dạng song song để CPU đọc.
Các tín hiệu nối tiếp được đưa đi là các tín hiệu xung điện áp 0 và 1. Để
truyền được đi xa bằng hệ thống viễn thông, tín hiệu đó được MODEM điều chế
thành tín hiệu xung âm tần, gửi qua đường truyền. Bên nhận có một MODEM thu
để giải điều chế, chuyển nó về dạng các xung 0 và 1 và được UART nhận và đưa
vào máy.
• Lúc bắt đầu làm việc DTE1 đưa ra xung /DTR (Data Terminal Ready) =
0 để báo cho DCE1 biết nó sẵn sàng làm việc. DCE1 cũng vậy, khi bắt đầu làm
việc nó đưa ra xung /DSR (Data Set Ready) = 0 để báo cho DTE1 biết là nó đã sẵn
sàng thu phát thông tin. Sau đó DCE1 được điều khiển để phát xung gọi sang phía
bên kia để kết nối liên lạc.
• Nếu DTE2 sẵn sàng làm việc nó sẽ gửi trả lời sang phía bên DTE1 những
xung âm tần theo qui ước.
• Khi DTE1 có ký tự cần gửi, nó đưa ra đầu /RTS (Request To Send) = 0
DCE1 sẽ đưa ra /DCD (Data Carrier Detect) = 0 để báo là đường truyền đã thông
và nó sẵn sàng nhận dữ liệu để chuyển đi thì nó sẽ đưa ra /CTS (Clear To Send) =
0. Nhận được thông báo này DTE1 gửi các ký tự sang DCE1 qua đầu phát TxD.
Sau khi truyền xong ký tự này, DTE1 đưa ra /RTS = 1 để báo kết thúc. DCE1 cũng
kết thúc công việc và đưa ra /CTS = 1 để thông báo.

TxD TxD
RxD RxD
M M
/RTS /RTS
O O
/CTS /CTS
D D
/DCD /DCD
E E
/DTR /DTR
M M
/DSR /DSR

DCE1
DTE1 DCE2 DTE2

101
Hình 8.2: Ghép UART với MODEM
Trong thực tế, người ta ghép nối PC và MODEM qua cổng COM nhờ các
cáp nối theo chuẩn RS 232C. Trong bài này ta sẽ nghiên cứu kỹ phương pháp ghép
nối và điều khiển việc truyền tin nối tiếp qua cổng COM gắn liền với chuẩn RS
232C.
8.2 Cấu trúc cổng truyền thông COM của IBM PC và chuẩn RS 232
Các máy tính hiện nay được thiết kế với các cổng vào/ra (I/O Ports) để trao
đổi số liệu với thiết bị ngoại vi và cổng COM là một trong các cổng truyền thông
tương ứng với phương thức truyền nối tiếp. Các máy tính PC thường được trang bị
hai cổng truyền nối tiếp ký hiệu là COM1 và COM2. Mỗi cổng gồm một mạch
điều khiển và phối hợp tín hiệu mà phần tử quan trọng nhất là các mạch tích hợp
ISN 8250 thực hiện toàn bộ chức năng truyền tin nối tiếp không đồng bộ như biến
đổi số liệu song song thành nối tiếp và ngược lại, điều khiển tốc độ truyền v.v…

102
Giao diện giữa UART với thiết bị truyền dẫn (DCE) là các chuẩn của
CCITT như RS232, RS422, RS423, X21, V24, V28,… Chuẩn RS 232 là chuẩn ra
đời sớm nhất gồm 25 tín hiệu và sau đó được cải tiến thành chuẩn RS232-C chỉ sử
Chip
Chip
Port Select
Add. 8250
Address
Bus
Decoder

Chip 8250
Address
Decoder
Data Bus Jack
D0 – D7 RS 232C
Bus Trans/ PC
DRIVER
/IOR /DISTR
Mode
/IOW /DOSTR
m
dụng 10 tín hiệu của RS232. Sơ đồ khối tổng quát của cổng truyền thông COM
được mô tả trên hình vẽ:

Hình 8.3: Sơ đồ khối tổng quát của cổng COM

Hình 8.4: Giao diện kết nối cổng COM và MODEM 56K

8.2.1 Tổ chức của UART 8250A


TxD
RxD
DTR
DSR
RTS
Đường truyền
CTS (Line)
DCD
RI
Signal Ground
103
Frame Ground
UART 8250 là mạch phối ghép vào ra không đồng bộ, lập trình được dùng
để chuyển thông tin song song (từ máy tính) thành nối tiếp (ra đường truyền) và
ngược lại. Nó là chip IC chuyên dụng loại LSI 40 chân. Sơ đồ chân tín hiệu của nó
được trình bày trên hình vẽ sau:

CS0 +Vcc
CS: Chip Select
CS1 /OUT1 RD or DISTR: Data Input Strobe
/CS2 /OUT2 WR or DOSTR: Data Output Strobe
/RD INT ADS: Address Strobe
/WR TxD Reset or MR: Master Reset
RD /RTS XTAL1,2: External Clock Input/Output
WR /DTR RCLK: Receiver Clock
A0 RxD BAUDOUT: Baud Out
A1 /DCD DDIS: Driver Disable
A2 /DSR CSOUT: Chip Select Out
D0 UART825 /CTS RI: Ring Indicator
D1 0A /RI CTS: Clear To Send
D2 CSOUT DSR: Data Set Ready
D3 /DDIS DCD: Data Carrier Detect
D4 NC RxD: Received Data
D5 /BAUDOUT DTR: Data Terminal Ready
D6 RCLK RTS: Ready To Send
D7 XTAL2/CLK TxD: Transmitted Data
ADS XTAL1/CLK INT: Interrupt
GND RESET

Hình 8.5: Sơ đồ chân tín hiệu chip UART 8250A

Các chân tín hiệu của UART 8250 được trình bày theo nhóm như sau:
Nhóm các tín hiệu địa chỉ:
- Các chân CS0, CS1, /CS2 là các chân tín hiệu chipselect, nếu chúng ở
mức tích cực thì UART được bộ vi xử lý kích hoạt.
- A0, A1, A2 là các chân tín hiệu địa chỉ cho phép chọn 10 thanh ghi bên
trong UART 8250.
- CSOUT (Chip Select Out) ở mức cao cho biết hệ vi xử lý đã chọn vi mạch
8250 bằng các tín hiệu chip select.
- /ADS (Address Select): ở mức thấp thông báo rằng tín hiệu địa chỉ và các
tín hiệu chọn chíp đã ổn định.
104
Nhóm tín hiệu số liệu:
- D0-D7: Kênh dữ liệu vào/ra hai chiều.
- SIN (Serial In): Lối vào cổng nối tiếp của số liệu từ ngoại vi.
- /WR (/DOSTR) hay /DOUTS: Các lối vào để hệ vi xử lý ghi số liệu hoặc
lệnh điều khiển vào các thanh ghi bên trong của 8250.
- /RD (DISTR) hay /DINS: Các lối vào để hệ vi xử lý đọc số liệu hoặc từ
trạng thái của các thanh ghi bên trong 8250.
- /DDIS ở mức thấp chỉ vi xử lý đang đọc số liệu từ 8250.
Nhóm tín hiệu nhịp:
- XTAL1, XTAL2 là các lối vào của phần tử dao động thạch anh.
- RCLK (Receiver Clock) là lối vào xung đồng hồ.
- /BaudOut là lối ra xung nhịp.
Nhóm điều khiển MODEM:
- DTR (Data Terminal Ready): Thiết bị đầu cuối sẵn sàng.
- /DSR (Data Set Ready): Thiết bị truyền thông sẵn sàng.
- /RTS (Request to Send): Yêu cầu phát.
- /CTS (Clear to Send): Sẵn sàng nhận.
- /DCD (Detect Carrier Data): Phát hiện sóng mang.
- /RI (Ring Indicator): Chỉ thị chuông.
Nhóm điều khiển khác:
- /INTR: Yêu cầu ngắt.
- /OUT1, /OUT2: Dùng cho người sử dụng với các ứng dụng không phải
chuẩn RS 232.
- VCC, GND, Reset: Nguồn nuôi, đất chung và tín hiệu khởi động.
Khối điều khiển ngắt:
- Logic điều khiển ngắt.
- Thanh ghi điều khiển ngắt.
- Thanh ghi nhận dạng ngắt.
Khối phát tín hiệu:
- Bộ tạo BAUD.

105
- Các bộ chia tần số LSB, MSB để tạo tốc độ phát.
- Điều khiển và định thời gian cho khối phát.
- Điều khiển và định thời gian cho khối thu.
Khối điều khiển MODEM:
- Logic điều khiển MODEM.
- Thanh ghi điều khiển MODEM.
Khối phát:
- Thanh ghi dịch phát.
- Thanh ghi đệm phát.
Khối thu:
- Thanh ghi dịch thu.
- Thanh ghi đệm thu.
Khối điều khiển chung:
- Thanh ghi điều khiển đường dây.
- Thanh ghi trạng thái đường dây.
Các thanh ghi bên trong của 8250:
DLAB A2 A1 A0 Thanh ghi được chọn
0 0 0 0 Thanh ghi đệm thu (RBR)
Thanh ghi đệm phát (THR).
0 0 0 1 Thanh ghi cho phép ngắt (IER).
1 0 0 0 Thanh ghi chốt / bộ chia phần thấp (LSB).
1 0 0 1 Thanh ghi chốt / bộ chia phần cao (MSB).
x 0 1 0 Thanh ghi nhận dạng ngắt (IIR).
x 0 1 1 Thanh ghi điều khiển đường đây (LCR).
x 1 0 0 Thanh ghi điều khiển MODEM (MCR).
x 1 0 1 Thanh ghi trạng thái đường dây(LSR).
x 1 1 0 Thanh ghi trạng thái MODEM (MSR).
x 1 1 1 Thanh ghi nháp (SPR).
8250 có 3 tín hiệu A2, A1,A0 cùng tín hiệu DLAB (Division Latch Access
Bit – Bit truy cập bộ chia tần số) để chọn ra các thanh ghi bên trong của 8250.

106
Mỗi thanh ghi bên trong của 8250 có chức năng riêng và dạng thức cụ thể
của chúng cho phép người dùng sử dụng 8250 vào các mục đích khác nhau. Ta có
thể khái quát chức năng chính của chúng như sau:
Thanh ghi điều khiển đường truyền (Line Control Register – LCR): Cho
phép ấn định độ dài của dữ liệu truyền đi (tính bằng bit), đặt chế độ tạo và kiểm tra
parity chẵn, lẻ,…
Thanh ghi trạng thái đường truyền (Line Status Register – LSR): Cho biết
trạng thái của việc truyền tín hiệu trên đường đây. Nó là thanh ghi thông báo trạng
thái đường truyền – phát hiện Break (dòng tin bị ngắt), các lỗi máy thu (tràn
khung, chẵn lẻ, tràn số, số liệu sẵn sàng và trạng thái không có số liệu truyền TxE).
Thanh ghi đệm phát (Transmitter Holding Register – THR): Ký tự cần phát
đi phải được lấy từ CPU, ghi vào thanh ghi này với bit DLAB = 0. Sau đó 8250 tạo
khung tin cho nó như đã địnhvà đưa từng bit ra chân Sout.
Thanh ghi đệm thu (Receiver Buffer Register – RBR): Khi 8250 nhận được
1 ký tự qua chân SIN, nó tháo bỏ khung cho ký tự và lưu ký tự tại thanh ghi đệm
thu để CPU đọc. CPU sẽ đọc được ký tự trong thanh ghi này khi bit DLAB = 0.
Thanh ghi cho phép ngắt (Interrupt Enable Register – IER): Thanh ghi này
dùng để cho phép hay cấm các nguyên nhân gây ngắt khác nhau.
Trong khi 8250 đang hoạt động, có thể tác động tới CPU thông qua chân
INTRPT của nó để tạo ra 4 loại ngắt. Mỗi bit trong số 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.
Thanh ghi nhận dạng ngắt (Interrupt Identifcatim Register – IIR): Thanh ghi
này được đọc mỗi khi có yêu cầu ngắt từ 8250. CPU đọc bit D0 của thanh ghi này
để biết có yêu cầu ngắt và kiểm tra bit D2, D1 để xác định nguồn gốc của yêu cầu
ngắt. Khi UART bị Reset, chỉ có ngắt ưu tiên 1 được phục vụ, tuy nhiên có thể
thay đổi điều này bằng cách dùng mặt nạ để che đi yêu cầu ngắt nào đó.
Thanh ghi điều khiển MODEM (MODEM Control Register – MCR): Thanh
ghi này điều khiển các tín hiệu ra của MODEM, nó cho phép điều khiển các tín
hiệutại các chân /DTR và /RTS của UART.

107
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 của RS232C, 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.
Bộ chia tần tạo tốc độ truyền tin: Bộ chia này gồm hai byte là LSB và MSB,
dùng để chia tần số xung nhịp nhằm tạo tốc độ mong muốn. Hệ số chia được tính
theo công thức:
Hệ số chia = (Tần số nhịp chuẩn)/(Tốc độ Baud yêu cầu x 16)
XTAL là các chân để cắm thạch anh dùng cho mạch dao động bên trong của
8250. Trường hợp sử dụng tín hiệu đồng hồ chuẩn từ bên ngoài thì đưa xung đồng
hồ vào chân XTAL1, bỏ lửng chân XTAL2 . Chân RLSD (Rceiver Line Signal
Detect) là chân báo hiệu thấy sóng mang, tức là đã thiết lập được đường truyền.

Tín hiệu ngắt

+Vcc

Reset từ máy tính


Đi tới
Data
MODEM
Bus

8250AMSOUT1
Mạch tương
OUT2D0INTRD thích RS232C
7/ADS MC1488
/IORD /DTRDISTRDOS
/IORW TRRTS 75150-P
/DISTR
/DOSTRSOUTA
0A1A2CS0CS1C
Mạch tương thích
S2XTAL2XTAL
+Vcc 1/RLSD/DSR 75154
/CTS/RISIN
AEN /BAUDOUTRC
KL

A9-A3

Từ OPTO Coupler
MODEM
qua mạch
tương
thích Tạo dao động
75154 18.432 MHz

Hình 8.6: Sơ đồ ghép nối UART với máy tính

108
Tín hiệu /RI là tín hiệu chuẩn của RS232C để MODEM thông báo là có
xung réo chuông. Tín hiệu INTRPT là tín hiệu để yêu cầu ngắt CPU trong trường
hợp 8250 được lập trình để có khả năng gây ngắt CPU.
Để 8250 hoạt động, người ta phải tiến hành ghép nối nó với máy tính và đặt
các chế độ thu, phát cho nó thông qua các thanh ghi bên trong. Sơ đồ nối ghép
8250 với máy tính được thể hiện như hình 8.6.
Kênh dữ liệu: D0 – D7 từ 8250 được nối đến máy tính qua cổng đệm như
74245. Hướng truyền tin của nó được điều khiển bằng tổ hợp /IORD, /IOWR của
máy tính và /CS của UART 8250. Thông qua kênh dữ liệu có thể điều khiển được
các thanh ghi bên trong của UART 8250 và cấp dữ liệu để UART chuyển thành
nối tiếp và truyền tới MODEM.
Tín hiệu ngắt của các 8250 sẽ nối đến đầu ngắt của bộ vi xử lý hay đầu vào
IRi của 8259 qua tín hiệu khống chế OUT2.
Nhóm tín hiệu nối với MODEM để điều khiển và khống chế thu phát tin
dưới dạng nối tiếp thông qua mạch tương thích RS232C. Có thể kiểm tra UART
bằng cách nối vòng đầu phát TxD với đầu thu RxD qua Opto Coupler.
Nhóm tín hiệu địa chỉ A0, A1, A2, và chọn chip CS được nối với các tín
hiệu tương ứng của máy tính để khống chế đọc, ghi 8250 và chọn các thanh ghi
bên trong 8250 theo địa chỉ từ 3F8h đến 3FFh (Theo cách tổ chức như trên).
Tín hiệu nhịp dùng cho 8250 lấy chung từ bộ dao động ngoài nên chân
XTAL1 không cần sử dụng. Tốc độ thu phát do bộ chia tần quyết định và do vậy
đầu ra Baud Out được nối với RCLK.
8.2.2 Chuẩn truyền thông RS 232:
Chuẩn RS 232 được hiệp hội Công nghiệp điện tử Mỹ EIA đưa ra năm 1960
nhằm đảm bảo sự tương thích giữa các thiết bị truyền tin của các nhà sản xuất.
Năm 1963, chuẩn này được cải tiến và gọi là RS232A, RS232B, RS232C vào
những năm 1965 và 1969. Ngày nay RS 232 là chuẩn giao diện I/O được sử dụng
rộng rãi nhất. Tuy nhiên do chuẩn này ra đời đã khá lâu, trước khi có họ mạch vi
điện tử họ TTL, vì vậy, các mức điện áp vào/ra của nó không tương thích với TTL.
Do đó, để nối bất kỳ RS232 nào vào máy tính đều phải qua bộ chuyển đổi điện áp

109
như MCI488, MCI489 để chuyển đổi các mức logic của TTL sang mức điện áp của
RS232 và ngược lại. Cụ thể, MCI488 được dùng để biến đổi từ TTL sang RS232
còn MCI489 thì thực hiện biến đổi ngược lại.

Chân Tín hiệu Chân Tín hiệu


1 Protective Ground 14 Secondary Transmitted Data
2 Transmitted Data 15 Transmitter Signal Element Timing
3 Received Data 16 Secondary Received Data
4 Request To Send 17 Receiver Signal Element Timing
5 Clear To Send 18 Unassigned
6 Data Set Ready 19 Secondary Request To Send
7 Signal Ground 20 Data Terminal Ready
8 Data Carrier Detect 21 Signal Quality Detector
9/10 Reserved For Data Set Testing 22 Ring Indicator
11 Unassigned 23 Data Signal Rate Selector
12 Secondary Data Carrier Detect 24 Transmitter Signal Element Timing
13 Secondary Clear To Send 25 Unassigned

Trên đây là bảng các chân của đầu nối RS 232 (Thường gọi là đầu nối DB –
25), trong đó DB – 25P là đầu đực còn DB – 25S là đầu cái. Do không phải tất cả
các chân của DB – 25 đều được máy tính sử dụng nên IBM đã đưa ra một phiên
bản chuẩn I/O truyền tin nối tiếp DB – 9 chỉ có 9 chân như bảng sau:
Cổng COM 9 chân

Chân Tín hiệu Chân Tín hiệu

1 Data Carrier Detect 6 Data Set Ready


2 Received Data 7 Request to Send

110
3 Transmitted Data 8 Clear to Send
4 Data Terminal Ready 9 Ring Indicator
5 Signal Ground

Để đảm bảo việc truyền dữ liệu nhanh và tin cậy giữa hai thiết bị, dữ liệu
cần phải được phối hợp với nhau. Truyền dữ liệu có các tín hiệu bắt tay để thiết bị
tìm có thể thông báo cho thiết bị phát biết để dừng phát dữ liệu khi nó không có
khả năng tiếp nhận. Một số chân của RS 232 được sử dụng làm các tín hiệu bắt tay.
Đó là:
- DTR: Thiết bị đầu cuối sẵn sàng. Sau khi được cấp nguồn và sau khi kết
thúc qua trình tự kiểm tra, thiết bị đầu cuối (hoặc cổng COM máy tính) gửi tín hiệu
DTR để báo rằng thiết bị đã sẵn sàng để truyền tin. Nếu có lỗi ở cổng COM, tín
hiệu này sẽ không được kích hoạt. Đây là tín hiệu tích cực thấp và có thể được
dùng để báo cho MODEM biết rằng máy tính đang hoạt động. Đây là chân ra từ
DTE (cổng COM của máy tính) và đưa vào MODEM.
- DSR: Dữ liệu sẵn sàng. Khi thiết bị truyền thông DCE (ví dụ như
MODEM) được cấp nguồn và tiến hành xong quá trình tự kiểm tra, tín hiệu DSR
được sử dụng để xác nhận dữ liệu đã sẵn sàng cho việc truyền tin. Như vậy DSR là
chân ra từ MODEM (DCE) và vào máy tính (DTE).Tín hiệu này có mức tích cực
thấp. Nếu vì một lý do nào đó MODEM không thể kết nối được vào mạng điện
thoại thì tín hiệu này sẽ không được kích hoạt để báo cho máy tính (hoặc thiết bị
đầu cuối) rằng nó không thể nhận hoặc gửi dữ liệu.
- RST: Yêu cầu gửi dữ liệu. Tín hiệu RST được dùng đểbáo cho MODEM
biết thiết bị DTE (ví dụ như máy tính) có một byte cần gửi. RTS là đầu ra tích cực
thấp từ thiết bị DTE vào thiết bị DCE.
- CTS: Tín hiệu thông. Để trả lời tín hiệu RST và khi đã sẵn sàng, MODEM
gửi tín hiệu CTS đến thiết bị DTE báo cho nó biết là MODEM đang sẵn sàng nhận
dữ liệu.
- CD: Dò sóng mang, hoặc DCD – dò sóng mang dữ liệu. MODEM gửi tín
hiệu DCD để báo cho thiết bị DTE (PC) rằng đã phát hiện được sóng mang và sự

111
kết nối giữa thiết bị DTE với MODEM đã được thiết lập. DCD là tín hiệu ra từ
MODEM và đưa vào DTE (PC).
- RI: Chỉ thị chuông. Đây là tín hiệu ra từ MODEM để báo rằng điện thoại
đang réo chuông. Tín hiệu này tắt hoặc mở đồng bộ với tiếng chuông. Trong 6 tín
hiệu bắt tay, đây là tín hiệu ít được sử dụng nhất.
Từ sự phân tích trên cho thấy, muốn truyền dữ liệu qua cổng COM của PC
trước hết phải xác lập được các thông số cho 8250 bằng cách gửi các thông số ra
các thanh ghi điều khiển và thanh ghi chốt số chia của nó cũng như tổ chức phần
cứng để các thiết bị có khả năng phối hợp hoạt động. Cuối cùng là xây dựng
chương trình phần mềm để đảm bảo cho việc truyền dữ liệu diễn ra theo đúng yêu
cầu thực tiễn.
Đối với việc thiết lập các thông số cho 8250, chúng ta có thể dễ dàng thực
hiện được thông qua việc lập trình cổng COM dùng ngắt INT 14h của BIOS . Các
tuỳ chọn của ngắt INT 14h được thiết lập qua thanh ghi AH của CPU. Kể từ máy
tính PS2 và tất cả các máy thế hệ sau, hàm AH = 04h cho phép người lập trình đạt
tốc độ truyền đến 19200. Có hai cách tổ chức phối hợp hoạt động cho các thiết bị,
tương ứng với hai kiểu tổ chức các tín hiệu bắt tay. Đó là:
Tổ chức bắt tay bằng phần mềm:
Để thực hiện bắt tay bằng phần mềm, các chân điều khiển MODEM và các
chân tín ở đầu ra RS 232 phải được nối như sau:

TxD TxD
RxD RxD
RTS RTS
CTS CTS
DTR DTR
DSR DSR
GND GND

Hình 8.7: Ghép nối để tổ chức bắt tay bằng phần mềm
Bình thường, khi không có dữ liệu truyền, phần phát trong trạng thái dấu
(Mark) luôn phát tín hiệu mức logic 1 ở đầu ra SOUT của phần thu đối phương
(chú ý là các đầu ra và đầu vào đều qua các bộ chuyển mức và lấy đảo, nên đầu ra
112
TxD của SOUT khi đó có giá trị –12V). Khi có một ký tự truyền đi, bit Start có
mức logic 0 được đưa đến đầu vào thu, khối điều khiển thu khởi động, thu nhận ký
tự vào thanh ghi đệm thu. Khi đó bit RxRD trong thanh ghi trạng thái đường
truyền được đặt lên 1 và gây ra một ngắt.
Chương trình được viết cho phần thu đầu tiên phải đọc thanh ghi trạng thái
đường truyền và kiểm tra giá trị bit RxRD. Nếu bit = 0 thì quay vòng kiểm tra lại.
Nếu bit = 1 thì đọc dữ liệu từ thanh ghi đệm thu vào CPU.
Chương trình viết cho phần phát là đọc thanh ghi trạng thái đường truyền và
kiểm tra bit TBE. Nếu TBE = 1 nghĩa là thanh ghi giữ phát đang rỗng. Chương
trình đưa một ký tự từ CPU ra thanh ghi giữ phát.
Nhược điểm của sơ đồ này là có khả năng bị thu đè, tức là ký tự trong thanh
ghi đệm thu chưa được đọc vào CPU đã có ký tự khác thu đè lên. Để khắc phục
nhược điểm này, người lập trình phải tính khoảng thời gian giữa hai lần đọc thanh
ghi đệm thu trong chương trình để chọn ra tốc độ baud cho thích hợp.
Bắt tay bằng phần cứng:
Bằng cách tổ chức các tín hiệu điều khiển MODEM làm thành các tín hiệu
bắt tay như sau ta có thể loại trừ hiện tượng thu đè:

TxD TxD
RxD RxD
RTS RTS
CTS CTS
DTR DTR
DSR DSR
GND GND

Hình 8.8: Ghép nối bắt tay bằng phần cứng


Trường hợp truyền dữ một chiều, khi đầu phát muốn phát dữ liệu, chương
trình đặt đường tín hiệu ra RTS lên mức cao (đầu ra /RTS của 8250 tích cực thấp)
và giữ nguyên cho đến khi tín hiệu nhận về CTS chuyển sang trạng thái tích cực
(mức cao). Nếu CTS giữ nguyên trạng thái không kích hoạt thì có nghĩa là bộ nhận
đang bận, chưa có thể nhận dữ liệu. Nếu CTS có mức tích cực, chương trình sẽ gửi

113
dữ liệu ra thanh ghi giữ phát, đồng thời đặt bit RTS về mức không tích cực. Đầu
thu dữ liệu , chương trình kiểm tra thanh ghi trạng thái MODEM. Nếu bit CTS và
DCTS đều có mức 1, có nghĩa là đã có một yêu cầu truyền dữ liệu từ bên phát,
8250 sẽ phát tín hiệu mức tích cực RTS đến CTS của phát. Khi đầu tín hiệu CTS
của phần thu bị thay đổi mức, chương trình kiểm tra bit RxRD và đọc dữ liệu từ bộ
đệm nhận vào CPU và chuyển trạng thái cho đường dây RTS.
Nếu việc truyền dữ liệu diễn ra theo hai chiều, cả thu và phát thì ta sử dụng
thêm các đường điều khiển DSR, DTR cho quá trình thu phát theo chiều ngược lại,
tương tự như RTS và CTS.
Việc trao đổi dữ liệu với hệ vi xử lý trong các trường hợp trên dược thực
hiện theo phương pháp hỏi vòng (polling). Ta cũng có thể sử dụng điều khiển theo
phương pháp ngắt. Khi đó, đầu ra INTR của 8250 được đưa tới mạch điều khiển
ngắt (8259) và chương trình con xử lý ngắt đầu tiên phải đọc thanh ghi nhận dạng
ngắt IIR và xác định nguồn yêu cầu ngắt do nguyên nhân nào gây ra thực hiện yêu
cầu ngắt đó.
Như vậy, trên đây ta đã xem xét cách tổ chức cơ bản cho một đường truyền
dữ liệu nối tiếp qua cổng COM trên cơ sở sử dụng các tín hiệu của RS 232 làm các
tín hiệu bắt tay. Việc lập trình điều khiển truyền tin qua cổng COM của PC được
thực hiện qua ngắt 14h của BIOS (xem phụ lục tham khảo).
8.3. Giao diện tuần tự đa năng USB (Universal Serial Bus)
Nếu tính từ thời điểm chính thức đa ra thị trường, cổng song song và cổng
nối tiếp đã gắn bó với thiết bị ngoại vi gần hai thập niên. Ngoại trừ lần đưa ra tính
năng Plưug and Play trong hệ điều hành Windows 95 thì công nghệ I/O trên PC
không có thay đổi lớn nào so với mẫu thiết kế ban đầu năm 1981. Cho đến nay
băng thông của giao tiếp song song và nối tiếp đủ so với nhu cầu của thiết bị ngoại
vi, nhưng với những ứng dụng mới thì cổng song song và nối tiếp không còn đáp
ứng được nữa. Nó do các nguyên nhân sau:
- Ở cổng nối tiếp, băng thông tối đa đạt được là 115,2 Kpbs còn cổng song
song thì băng thông là 500Kpbs. Như vậy cả cổng nối tiếp và song song, băng

114
thông đều hoàn toàn không đáp ứng đủ nhu cầu của khá nhiều thiết bị, ví dụ đơn
giản là máy ảnh số chẳng hạn.
- Khi kết nối các thiết bị mà dùng cổng nối tiếp và song song không phải lúc
nào cũng đơn giản, đặc biệt là khi muốn điều khiển các thiết bị liên kết với nhau
theo dạng chuỗi. Thêm vào đó, kích thước của các cổng này cũng có phần gây bất
tiện trong các thao tác ứng dụng.
- Đối với các cổng nối tiếp và song song, mỗi cổng đòi hỏi một yêu cầu
ngắt (IRQ – interrupt request) trong khi mỗi PC chỉ có thể đáp ứng được cỡ 20 yêu
cầu ngắt, sau khi cài đặt hệ thống chỉ còn khoảng 5 IRQ dành cho thiết bị ngoại vi.
Như vậy có thể nói khi dùng các cổng song song và nối tiếp thì tài nguyên phần
cứng sẽ bị hạn chế.
- Cuối cùng, một khó khăn nữa hạn chế đối với việc sử dụng các cổng này là
số lượng cổng hạn chế, hầu hết các PC đều có hai cổng nối tiếp và một cổng song
song. Có thể tăng số lượng cổng nối tiếp và song song lên nhưng sẽ phải hy sinh
IRQ.
Trong những năm gần đây, công nghệ I/O là một lĩnh vực có nhiều đột phá,
trong đó có USB. Chính USB đã nâng khái niệm Plưug-and-Play lên một tầm cao
mới và giúp đơn giản hoá việc kết nối dữ liệu giữa máy tính với nhiều thiết bị
ngoại vi. USB là cổng truyền thông nối tiếp sử dụng dạng đầu nối nhỏ, phù hợp
với tất cả thiết bị I/O thông thường nhằm giảm bớt số lượng cổng và đầu nối.
Người ta có thể kết nối tới 127 thiết bị với máy tính thông qua USB theo kiểu nối
tiếp hoặc dùng hub. Trung bình mỗi hub cho phép gắn 7 thiết bị và cũng có thể
mắc nối tiếp các hub USB để tăng số lượng thiết bị kết nối với máy tính.
Về mặt tốc độ, USB vợt qua giới hạn tốc độ của chip UART là cốt lõi của
giao tiếp tuần tự. USB 1.1 đạt tốc độ 12Mpbs – quá đủ so với yêu cầu của thiết bị
ngoại vi, và ngày nay với USB 2.0 băng thông có thể lên đến 480 Mbps, quá tuyệt
vời đối với việc truyền thông tin tốc độ cao.
Đối với việc kết nối, USB thực sự thân thiện với người sử dụng nhờ công
nghệ Plug and Play (Cắm và chạy), do vậy cực kỳ thuận tiện trong ứng dụng, tháo
lắp cũng nh định dạng thiết bị của hệ thống. Với tính năng này, USB không yêu

115
cầu cao về card mở rộng cũng như cấu hình của hệ thống, thay vào đó, bus cho
phép thiết bị ngoại vi tự cấu hình khi gắn và định trạng thái nối hoặc tách trong
máy tính, thiết bị đang hoạt động. Đặc biệt là không cần phải cài đặt trình điều
khiển nh ở cổng song song và nối tiếp, và tất nhiên là loại bỏ bớt đi việc chọn lựa
IRQ, DMA, địa chỉ I/O. Sở dĩ USB làm được điều này là nhờ biết chuyển việc
quản lý kết nối thiết bị cho bộ điều khiển chủ (thường tích hợp trên bo mạch chủ
hoặc card bổ sung). Bộ điều khiển chủ phối hợp cùng các bộ điều khiển con trong
hub thực hiện nhiệm vụ quản lý thiết bị nên giảm tải cho bộ xử lý và nâng hiệu
năng chung của hệ thống. Đến lợt mình phần mềm hệ thống USB cài trong hệ điều
hành lại quản lý bộ điều khiển chủ. Dữ liệu được truyền trên một “con đường” hai
chiều dới sự “chỉ dẫn” của bộ điều khiển hub. Một số phiên bản quản lý bus có khả
năng dành một phần băng thông cho thiết bị được chỉ định để truyền dữ liệu đẳng
thời (isochronous). Ngoài ra trong tuyến bus USB có đường cấp điện 5V; 0,5A nên
một số loa hoặc máy quét cầm tay không cần nguồn riêng. Hệ thống tự động nhận
biết sự hiện diện của thiết bị và cấp nguồn. Với sự phát triển tốt và đang dần hoàn
thiện như vậy thì cổng USB trong tương lai hoàn toàn có thể thay thế toàn bộ
nhiệm vụ của cổng song song và cổng nối tiếp, và một “cổng kết nối chung” như
vậy là hoàn toàn hợp lý, nó tránh cho người sử dụng phiền toái trong việc kết nối
và ứng dụng các tính năng của thiết bị ngoại vi.
Thực chất, cấu trúc, cơ chế điều khiển và giao thức USB rất phức tạp. Việc
tìm hiểu chi tiết được giới thiệu trong nhiều tài liệu tham khảo. Trong mục này, ta
chỉ giới thiệu những nét khái lược về USB.
8.3.1 Các thành phần của USB
Chủ USB:
Thành phần đầu tiên và quan trọng nhất trong cấu trúc USB là chủ USB –
tức là máy vi tính. Đây là máy vi tính cá nhân với hệ điều hành có khả năng quản
lý USB. Vi mạch PCI – Chipset đảm nhiệm về phần cứng điều khiển mạng USB.
Giao diện USB bao gồm 2 modul: Động cơ giao diện tuần tự SIE (Serial Interface
Engine) chịu trách nhiệm về giao thức bus và bộ hub gốc (Root hub) chịu trách

116
nhiệm mở rộng các cổng USB. Cấu trúc phần mềm điều khiển USB được chia
thành các phần như sau:
- Phần điều khiển chủ để kết nối phần cứng USB với phần còn lại của cấu
trúc phần mềm.
- Phần mềm hệ thống USB có tác dụng nh một lớp (layer) giữa phần điều
khiển chủ và phần mềm điều khiển chủ.
- Phần mềm khách cho phép trao đổi với thiết bị ngoại vi USB.
Một mạng USB chỉ được phép có một chủ USB. Máy tính sử dụng phần
cứng và phần mềm USB làm việc nh một chủ bus. Máy tính nhận biết việc cắm
thêm hay rút ra một thiết bị ngoại vi để khởi động quá trình đánh số (enumeration)
các quá trình truyền dữ liệu khác trong bus. Máy tính cũng có trách nhiệm kiểm tra
trạng thái, thống kê hoạt động và kiểm tra ghép nối điện trở giữa bộ điều khiển chủ
và các thiết bị USB ngoại vi.
Cáp USB:
Cáp USB bao gồm 4 dây: hai dây (D+, D-) được sử dụng để truyền dữ liệu
theo phương pháp vi sai. Hai dây còn lại là dây nguồn (Vbus = 5V) và dây tiếp đất
(GND). Nguồn cho thiết bị USB có thể lấy từ thiết bị chủ (Host) (VD: máy tính) ,
từ Hub hoặc thiết bị có thể “tự cấp nguồn”. Cáp rẻ tiền và không có vỏ chắn bảo vệ
thường được dùng cho thiết bị chậm (1,5Mpbs). Thiết bị nhanh (12Mpbs) đòi hỏi
cáp được chắn bảo vệ. Cấu trúc cáp USB có thể được biểu diễn nh sau:

Ổ và phích cắm USB có 4 chân và chia làm hai loại có cấu tạo cơ học khác
nhau. Loại A dùng cho máy tính PC hoặc hub có dạng hình chữ nhật, còn ổ và
phích cắm cho các thiết bị có dạng hình vuông và có tên gọi là kiểu B. Hai kiểu

117
này dĩ nhiên không lắp lẫn cho nhau được. ở phía các thiết bị ngoại vi, các đầu D+
và D- được bảo vệ bởi điện trở cuối. Thiết bị tốc độ nhanh cần có điện trở nối đất
cho đầu D+, thiết bị chậm cần điện trở nối nguồn cho đầu D-. Những điện trở này
tạo ra các mức điện thế khác nhau giữa D+ và D-, giúp cho máy chủ phát hiện
được việc cắm hay rút một thiết bị ra khỏi mạng USB.
Thiết bị USB:
Các thiết bị USB có chức năng tớ trong mạng bus. Có hai dạng thiết bị USB
nh sau:
- Hub thường có một bộ điều khiển hub và một bộ lặp (repeater). Một hub có
nhiệm vụ chuyển một ổ cắm USB thành nhiều ổ cắm. Ví dụ một hub có thể có một
ổ cắm hướng về máy chủ (ngược) và 4 ổ cắm ra thiết bị (xuôi) dùng để cắm hub
với các thiết bị chức năng.
- Thiết bị chức năng là các thiết bị ngoại vi của máy tính như chuột, bàn
phím, joystick, camera, … Để đơn giản hoá việc ghép nối, màn hình và bàn phím
còn được cấy thêm một hub để có thể nối tiếp đến các thiết bị khác. Mọi thiết bị
USB đều phải tuân thủ theo quy ước USB để máy chủ có thể phát hiện được
chúng.
Nhìn chung thì mọi thiết bị USB đều được thiết kế từ ba thành phần chính:
- Một động cơ giao diện tuần tự SIE (Serial Interface Engine) là một vi mạch
tích hợp silic. Thành phần này chịu trách nhiệm nhận và gửi dữ liệu theo giao thức
USB.
- Một tổ hợp giữa phần cứng và firmware chịu trách nhiệm truyền dữ liệu
giữa SIE và điểm cuối của thiết bị qua những giao diện (hay còn gọi là ống – pipe)
thích hợp của chúng.
- Thành phần thứ ba là phần chức năng của thiết bị ngoại vi (chức năng bàn
phím, chức năng chuột, …).
Điểm cuối là đầu nguồn hay đầu phát của một thiết bị ngoại vi USB. Chúng
là những thanh ghi dữ liệu có thể được đọc hay ghi tuỳ theo chiều truyền dữ liệu.
Đường ống (pipe) là phần mềm quản lý điểm cuối của thiết bị USB chủ (máy tính).
Có thể hiểu chúng là những kênh phần mềm, được gọi lên trong phần mềm điều

118
hành USB và có nhiệm vụ truyền tin đến những điểm cuối của thiết bị ngoại vi.
Mọi thiết bị trong mạng USB sẽ cùng chia dải tần qua một giao thức khung truy
nhập máy chủ (hostisceduled token – based protocol). Khi máy chủ đa một khung
truy nhập (token) vào mạng USB, thiết bị tương ứng sẽ phát hiện ra địa chỉ của nó
gài trong khung và trả lời lại máy chủ.
8.3.2 Các loại truyền dữ liệu của USB
Thông tin có thể đi theo hai chiều hay một chiều. Máy chủ xử lý việc trao
đổi dữ liệu với từng thiết bị ngoại vi một cách độc lập. USB quản lý bốn loại
truyền dữ liệu: điều khiển , ngắt, đồng bộ cách biệt (isochronous) và khối.
Truyền điều khiển (Control transfer) là phương pháp có thể truyền hai chiều,
nhưng chỉ truyền được một chiều trong một thời điểm. Loại truyền này được sử
dụng để nghiên cứu cài đặt hay định dạng thiết bị ngoại vi. Giao thức truyền điều
khiển bao gồm một giai đoạn “Thiết lập”, giai đoạn “Dữ liệu” và giai đoạn “Trạng
thái”. Mọi thiết bị ngoại vi USB đều phải xử lý được loại truyền này. Ngoài ra
phương pháp truyền này có thể dùng để truyền dữ liệu với một lượng dữ liệu nhỏ.
Truyền ngắt (Interrupt transfer) là truyền một chiều. Loại truyền này được
dùng cho các thiết bị ngoại vi nh bàn phím, chuột và joystick. Vì chủ USB (máy
tính) không thể bị ngắt từ thiết bị ngoại vi được xử lý trong vòng đợi, người lập
trình hệ thống có nhiệm vụ xử lý vòng đợi này. Giao thức truyền ngắt khởi động
khi máy chủ bắt đầu bằng một khung IN (IN token). Thiết bị ngoại vi trả lời bằng
một gói dữ liệu. Khi nhận hết dữ liệu máy chủ sẽ trả lời bằng một gói ACK nếu dữ
liệu không có lỗi hoặc không trả lời gì nếu có lỗi. Nếu bị nghẽn ở điểm cuối của
thiết bị ngoại vi, nó sẽ gửi đến máy chủ gói STALL và đợi phần mềm hệ thống xử
lý.
Truyền đồng bộ cách biệt (Isochronous transfer) là phương pháp truyền một
chiều. Hướng của cuộc truyền có thể từ thiết bị ngoại vi ra máy chủ hoặc ngược
lại. Vì thế cuộc truyền cần hai điểm cuối ở thiết bị ngoại vi hoặc hai đường ống
phần mềm ở phía máy chủ. Giao thức truyền đồng bộ cách biệt bắt đầu bằng một
gói IN hoặc OUT từ máy chủ tuỳ theo hướng truyền và loại điểm cuối. Ví dụ,
trong trường hợp gói OUT, máy chủ tiếp tục bằng cách truyền dữ liệu. Truyền

119
đồng bộ cách biệt không dùng gói bắt tay để thông báo kết quả truyền. Vì thế
thông tin có thể bị thất lạc. Phương pháp truyền đồng bộ cách biệt chấp nhận hi
sinh độ chính xác của dữ liệu để đảm bảo thời gian phân phối dữ liệu. Loại truyền
này thường được sử dụng cho điện thoại, loa để bảo đảm thu được âm thanh.
Truyền khối là phương pháp truyền hai chiều. Hướng truyền có thể từ điểm
cuối về máy chủ hay ngược lại. Nh vậy, một thiết bị ngoại vi cần cả hai chiều dữ
liệu sẽ cần có hai điểm cuối. Giao thức truyền khối gồm ba giai đoạn: khung, dữ
liệu và bắt tay. Nếu thiết bị kẹt sẽ không có giai đoạn dữ liệu mà chỉ có khung và
bắt tay. Dữ liệu sẽ được truyền qua ống từ một vùng đệm dữ liệu trong bộ nhớ của
chương trình tương ứng tới một điểm cuối của thiết bị ngoại vi. Phương pháp
truyền khối được sử dụng khi đòi hỏi sự chính xác của dữ liệu mà tốc độ của việc
truyền dữ liệu không yêu cầu quan trọng lắm.
Phương pháp truyền khối và truyền đồng bộ cách biệt bổ xung cho nhau
trong phương thức truyền USB và đây là hai phương pháp thường được sử dụng để
truyền các dữ liệu lớn của USB.
8.3.3 Hoạt động của USB
Sau đây là phương thức của dòng dữ liệu thông dụng tới thiết bị khi mà nó
cắm vào bus của Chủ USB. Nên nhớ rằng ở đây Chủ USB là Hub USB bên trong
và các Hub bên ngoài có thể được nối thuận chiều từ Hub của Chủ USB:
1. Chủ USB nhận ra thiết bị được nối vào một trong các Hub USB của
nó. Nó nhận thấy điều này nhờ một bộ phân áp đơn giản được nối tới đôi dây dữ
liệu vi sai trên Bus USB. Các điện trở này ở bên trong hub USB và thiết bị.
2. Chủ USB gửi yêu cầu Get_Port_Status tới Hub để tìm hiểu thêm về
thiết bị được lắp vào. Nó có thể là một Hub khác hoặc một thiết bị được kết nối
trực tiếp tới Hub gốc của Chủ USB, hoặc một thiết bị được nối vào Hub thuận
chiều.
3. Sau khi nhận được trả lời từ Hub thì Chủ USB định lệnh
Set_Port_Feature lên Hub mà phát ra lệnh Reset trên đôi dây dữ liệu nhưng chỉ với
thiết bị mới được kết nối với bus USB.

120
4. Chủ USB sau đó kiểm tra để biết được nếu thiết bị đã hết trạng thái
Reset nhờ phát lệnh Get_Port_Status tới Hub. Sau khi Reset, thiết bị được ở trạng
thái Defaut (mặc định) và chỉ chấp nhận dòng lớn nhất là 100mA. Trong chế độ
Defaut thiết bị có thể truyền thông với Chủ USB thông qua điểm cuối 0
5. Hub bây giờ sẽ dò tốc độ của thiết bị bằng cách sử dụng bộ phân áp
được nối tới Bus USB. Hub gửi tốc độ của thiết bị trở lại Chủ USB.
6. Chủ USB gửi lệnh Get_Descriptor tới Hub mà ở Hub đó lấy kích th-
ước gói của thiết bị thông dụng và gửi kết quả lại tới Chủ USB
7. Chủ USB bây giờ gửi lệnh Set_Address tới Hub đã gửi thông tin này
tới thiết bị. Thiết bị báo cho biết bằng lệnh gửi trả lại tới Chủ USB và định địa chỉ
bên trong.
8. Để biết thêm về thiết bị này, Chủ USB gửi 1 lệnh Get_Descriptor tới
địa chỉ mà thiết bị mới nhận. Thông tin trở lại Chủ USB chứa nhiều đặc điểm khác
nhau của thiết bị mà Chủ USB cần biết cho hoạt động của nó. Các câu hỏi của Chủ
USB tiếp tục thêm 2 lần nữa để tìm tất cả các thông tin cần thiết.
9. Trên cơ sở các thông tin nhận được từ thiết bị, Chủ USB xác định
driver tối u của thiết bị để sử dụng cho truyền thông với nó.
10. Driver của thiết bị trong Chủ USB bây giờ tiếp nhận bằng lệnh đề
nghị Set_Configuration. Có thể có một vài cấu hình cho một thiết bị, và driver của
thiết bị xác định cái nào sử dụng cơ sở của thông tin nhận được từ thiết bị trong
phúc đáp lệnh Get_Descriptor.
11. Thiết bị bây giờ đã sẵn sàng để sử dụng.
Ta có thể thấy rằng, giao thức USB là một tổ hợp sắp xếp rõ ràng. Mẫu câu
hỏi và phúc đáp chính xác, chặt chẽ, tuy nhiên, quan trọng hơn cả là nó làm giảm
bớt xung khắc trên bus. Khi có thiết bị gắn vào USB, thông qua các lệnh cụ thể nh
trên, USB sẽ đánh số cho thiết bị một cách chính xác và trên cơ sở đó quản lý thiết
bị trong hoạt động của mình.

121
Bài 9: CÁC THIẾT BỊ NGOẠI VI

Bộ xử lý của máy tính điện tử liên hệ với môi trường bên ngoài nhờ các thiết
bị ngoại vi. Các thiết bị ngoại vi được chia ra hai loại:
Thiết bị vào (Input Device): Là các thiết bị có chức năng thu nhận các thông
tin từ môi trường bên ngoài rồi mã hoá chúng sang dạng số và chuyển vào cho máy
tính để lưu trữ hoặc xử lý. Một số thiết bị vào như: bàn phím, chuột, Camara,
Scanner, ...
Thiết bị ra (Output Device): Là các thiết bị có chức năng chuyển các thông
tin ở dạng số trong máy tính ra bên ngoài theo các dạng phù hợp với các mục đích
khác nhau. Một số thiết bị ra thông dụng như : màn hình, máy in, loa, ...
Thiết bị nhớ ngoài như đĩa mềm, đĩa cứng, đĩa mềm, đĩa CD, thẻ nhớ, ... là
các thiết bị vừa có chức năng của thiết bị vào vừa có chức năng của thiết bị ra.
Theo một nghĩa nào đó, có thế xem các thiết bị này như là các thiết bị ngoại vi.
9.1 Đĩa mềm và ổ đĩa mềm
9.1.1 Đĩa mềm
Đĩa mềm gồm một đĩa từ bằng nhựa dẻo được bảo vệ bằng một bao giấy hay
nhựa cứng. Trên bao có khoét một lỗ dài cho phép đầu đọc của ổ đĩa có thể tiếp
xúc với mặt đĩa để đọc / ghi dữ liệu. Có 2 loại đĩa mềm: đường kính 5.25 inch (hầu
như không còn sử dụng) và đường kính 3.5 inch (chỉ dùng dung lượng 1.44 MB).
Mỗi đĩa mềm được tổ chức thành các đơn vị sau:
- Track (rãnh từ): là vùng đường tròn đồng tâm lưu trữ dữ liệu. Mật độ ghi
dữ liệu tính bằng đơn vị track/inch. Track được đánh số bắt đầu từ 0 kể từ vòng
ngoài vào.

122
- Sector (cung từ): mỗt track sẽ được chia thành nhiều sector, mỗi sector
chứa 512 bytedữ liệu. Số sector/track tùy thuộc vào từng loại đĩa (từ 8 ÷ 36).
Sector được đánh số từ 1.
- Cluster (liên cung): là một nhóm gồm 2, 4 hay 8 sector.
Dung lượng đĩa mềm = số track × số sector/track × số mặt × 512 byte

Hình 9.1: Đĩa mềm 3.5 inch


Bảng mô tả thông tin của một số loại đĩa mềm

Chương trình định dạng đĩa mềm (format) cho phép tạo ra các track và
sector trên đĩa. Ngoài 512 byte dữ liệu, các track và sector còn chứa các byte lưu
trữ thông tin dùng cho mục đích định vị và đồng bộ.
9.1.2 Ổ đĩa mềm

123
Ổ đĩa mềm cho phép CPU đọc / ghi dữ liệu lên đĩa mềm. Khi đó, đĩa được
quay bằng một động cơ điều khiển với tốc độ 300 vòng/phút đối với đĩa 300 KB
hay 360 vòng/phút đối với các loại đĩa khác. Đĩa mềm có hai mặt thì phải cần hai
đầu từ đọc / ghi dữ liệu. Đầu từ được gắn ở đầu cần truy xuất (arm access). Chuyển
động quay của một động cơ bước sẽ biến thành chuyển động tịnh tiến theo phương
bán kính của cần truy xuất qua cơ cấu bánh răng. Đầu từ có một cuộn dây cảm
ứng. Khi đọc, sự biến thiên từ thông của phần tử lưu trữ tạo thành điện thế cảm
ứng ở hai đầu ra cuộn dây tạo nên tín hiệu dữ liệu. Khi ghi, cuộn dây sẽ phát ra từ
trường qua khe từ để từ hóa bột oxide sắt trên mặt đĩa thành các trạng thái tương
ứng với mức dữ liệu 0 và 1.
Mạch điều khiển ổ đĩa mềm:
Mạch điều khiển ổ đĩa mềm thường được cắm trên một khe cắm mở rộng.
Bộ điều khiển có một vi xử lý riêng với chương trình trong ROM của nó, thông
thường là NEC µPD765 hay Intel 8207A. Việc ghi dữ liệu được thực hiện qua các
bước sau:
- Dữ liệu truyền từ bus vào bộ giao tiếp bus.
- Bộ điều khiển xác định byte CRC (Cycle Redundancy Check), đổi dữ
liệu song song thành nối tiếp và định dạng thích hợp
- Bộ tách dữ liệu đổi chuỗi dữ liệu thành chuỗi mã FM hay MFM
(Modified FM) và phát ra các xung đánh dấu.
- Mạch giao tiếp SA-450 truyền chuỗi dữ liệu đã mã hóa tới ổ đĩa.
- Đầu từ ghi số liệu đã mã hóa lên đĩa.
9.2 Đĩa cứng
Dù rằng công nghệ mới không ngừng phát minh nhiều loại bộ phận lưu trữ
một lượng thông tin lớn nhưng đĩa từ vẫn giữ vị trí quan trọng từ năm 1965. Đĩa từ
có hai nhiệm vụ trong máy tính.
- Lưu trữ dài hạn các tập tin.
- Thiết lập một cấp bộ nhớ bên dưới bộ nhớ trong để làm bộ nhớ ảo lúc
chạy chương trình.

124
Dưới đây mô tả một cách khái quát cấu tạo, cách vận hành cũng như đề cập
đến các tính chất quan trọng của đĩa cứng.
Một đĩa cứng chứa nhiều lớp đĩa (từ 1 đến 4) quay quanh một trục khoảng
3.600-15.000 vòng mỗi phút. Các lớp đĩa này được làm bằng kim loại với hai mặt
được phủ một chất từ tính (hình V.1). Đường kính của đĩa thay đổi từ 1,3 inch đến
8 inch. Mỗi mặt của một lớp đĩa được chia thành nhiều đường tròn đồng trục gọi là
rãnh. Thông thường mỗi mặt của một lớp đĩa có từ 10.000 đến gần 30.000 rãnh.
Mỗi rãnh được chia thành nhiều cung (sector) dùng chứa thông tin. Một rãnh có
thể chứa từ 64 đến 800 cung. Cung là đơn vị nhỏ nhất mà máy tính có thể đọc hoặc
viết (thông thường khoảng 512 bytes). Chuỗi thông tin ghi trên mỗi cung gồm có:
số thứ tự của cung, một khoảng trống, số liệu của cung đó bao gồm cả các mã sửa
lỗi, một khoảng trống, số thứ tự của cung tiếp theo.
Với kỹ thuật ghi mật độ không đều, tất cả các rãnh đều có cùng một số cung,
điều này làm cho các cung dài hơn ở các rãnh xa trục quay có mật độ ghi thông tin
thấp hơn mật độ ghi trên các cung nằm gần trục quay.

Hình 9.2: Cấu tạo của đĩa cứng

125
Với công nghệ ghi với mật độ đều, người ta cho ghi nhiều thông tin hơn ở
các rãnh xa trục quay. Công nghệ ghi này ngày càng được dùng nhiều với sự ra đời
của các chuẩn giao diện thông minh như chuẩn SCSI.

Hình 9.3: Mật độ ghi dữ liệu trên các loại đĩa cứng

Để đọc hoặc ghi thông tin vào một cung, ta dùng một đầu đọc ghi di động áp
vào mỗi mặt của mỗi lớp đĩa. Các đầu đọc/ghi này được gắn chặt vào một thanh
làm cho chúng cùng di chuyển trên một đường bán kính của mỗi lớp đĩa và như thế
tất cả các đầu này đều ở trên những rãnh có cùng bán kính của các lớp đĩa. Từ
“trụ“ (cylinder) được dùng để gọi tất cả các rãnh của các lớp đĩa có cùng bán kính
và nằm trên một hình trụ. Người ta luôn muốn đọc nhanh đĩa từ nên thông thường
ổ đĩa đọc nhiều hơn số dữ liệu cần đọc. Để quản lý các phức tạp khi kết nối (hoặc
ngưng kết nối) lúc đọc (hoặc ghi) thông tin, và việc đọc trước, ổ đĩa cần có bộ điều
khiển đĩa.
Công nghiệp chế tạo đĩa từ tập trung vào việc nâng cao dung lượng của đĩa
mà đơn vị đo lường là mật độ trên một đơn vị bề mặt.
Đặc trưng Mô tả
Dung lượng tối đa Có thể đạt 500 GB
Số lượng đầu đọc 1-8
Số đĩa 1-4
Cache 2-16(MB)
Sector 512 Byte
Tốc độ quay của đĩa 3600-15000
Mật độ Có thể đạt 95Gb/inch2
Mật độ ghi Có thể đạt 702000 bit/Inch
126
Tốc độ dữ liệu tối đa Có thể đạt 900 Mb/1s
Tốc độ truyền dữ liệu với ngoại vi Có thể đạt 320 Mb/1s
Thời gian chuyển track (R/W) Có thể đạt 15ms
Thời gian quay nửa vòng Có thể đạt 6ms
Bảng thông số kỹ thuật của đĩa cứng
9.3 Đĩa quang
Ngày nay, đĩa quang đã được sử dụng phổ biến, chúng có mật độ ghi thông
tin cao hơn đĩa từ thông thường. Các đĩa quang dựa trên cùng một cộng nghệ được
sử dụng trong Compact Disc để ghi âm nên được gọi tên là CD ROM. Các thiết bị
lưu trữ quang rất thích hợp cho việc phát hành các sản phẩm văn hoá, sao lưu dữ
liệu trên các hệ thống máy tính hiện nay. Ra đời vào năm 1978, đây là sản phẩm
của sự hợp tác nghiên cứu giữa hai công ty Sony và Philips trong công nghiệp giải
trí. Từ năm 1980 đến nay, công nghiệp đĩa quang phát triển mạnh trong cả hai lĩnh
vực giải trí và lưu trữ dữ liệu máy tính. Quá trình đọc thông tin dựa trên sự phản
chiếu của các tia laser năng lượng thấp từ lớp lưu trữ dữ liệu. Bộ phận tiếp nhận
ánh sáng sẽ nhận biết được những điểm mà tại đó tia laser bị phản xạ mạnh hay
biến mất do các vết khắc (pit) trên bề mặt đĩa. Các tia phản xạ mạnh chỉ ra rằng tại
điểm đó không có lỗ khắc và điểm này được gọi là điểm nền (land). Bộ nhận ánh
sáng trong ổ đĩa thu nhận các tia phản xạ và khuếch tán được khúc xạ từ bề mặt
đĩa. Khi các nguồn sáng được thu nhận, bộ vi xử lý sẽ dịch các mẫu sáng thành các
bit dữ liệu hay âm thanh. Các lỗ trên CD sâu 0,12 micron và rộng 0,6 micron (1
micron bằng một phần ngàn mm). Các lỗ này được khắc theo một track hình xoắn
ốc với khoảng cách 1,6 micron giữa các vòng, khoảng 16.000 track/inch. Các lỗ
(pit) và nền (land) kéo dài khoản 0,9 đến 3,3 micron. Track bắt đầu từ phía trong
và kết thúc ở phía ngoài theo một đường khép kín các rìa đĩa 5mm. Dữ liệu lưu
trên CD thành từng khối, mỗi khối chứa 2.352 byte. Trong đó, 304 byte chứa các
thông tin về bit đồng bộ, bit nhận dạng (ID), mã sửa lỗi (ECC), mã phát hiện lỗi
(EDC). Còn lại 2.048 byte chứa dữ liệu. Tốc độ đọc chuẩn của CD-ROM là 75
khối/s hay 153.600 byte/s hay 150KB/s (1X). Dưới đây là một số loại đĩa quang
thông dụng.

127
CD (Compact Disk): Đĩa quang không thể xoá được, dùng trong công nghiệp
giải trí (các đĩa âm thanh được số hoá). Chuẩn đĩa có đường kính 12 cm, âm thanh
phát từ đĩa khoảng 60 phút (không dừng).
CD-ROM (Compact Disk Read Only Memory): Đĩa không xoá dùng để chứa
các dữ liệu máy tính. Chuẩn đĩa có đường kính 12 cm, lưu trữ dữ liệu hơn 650 MB.
Khi phát hành, đĩa CD-ROM đã có chứa nội dung. Thông thường, dĩa CD-ROM
được dùng để chứa các phần mềm và các chương trình điều khiển thiết bị.
CD-R (CD-Recordable): Giống như đĩa CD, đĩa mới chưa có thông tin, người
dùng có thể ghi dữ liệu lên đĩa một lần và đọc được nhiều lần. Dữ liệu trên đĩa CD-
R không thể bị xoá.
CD-RW (CD-Rewritable): Giống như đĩa CD, đĩa mới chưa có thông tin,
người dùng có thể ghi dữ liệu lên đĩa, xoá và ghi lại dữ liệu trên đĩa nhiều lần.
DVD (Digital Video Disk - Digital Versatile Disk): Ra đời phục vụ cho công
nghiệp giải trí, đĩa chứa các hình ảnh video được số hoá. Ngày nay, DVD được sử
dụng rộng rãi trong các ứng dụng công nghệ thông tin. Kích thước đĩa có hai loại:
8cm và 12 cm. Đĩa DVD có thể chứa dữ liệu trên cả hai mặt đĩa, dung lượng tối đa
lên đến 17GB. Các thông số kỹ thuật của đĩa DVD-ROM (loại đĩa chỉ đọc) so với
CD-ROM. Tốc độ đọc chuẩn (1X) của DVD là 1.3MB/s (1X của DVD tương
đương khoảng 9X của CDROM).
DVD-R (DVD-Recordable): Giống như đĩa DVD-ROM, người dùng có thể
ghi dữ liệu lên đĩa một lần và đọc được nhiều lần. Đĩa này chỉ có thể ghi được trên
một mặt đĩa, dung lượng ghi trên mỗi mặt tối đa là 4.7 GB.
DVD-RW (DVD-Rewritable): Giống như đĩa DVD-ROM, người dùng có thể
ghi, xoá và ghi lại dữ liệu lên đĩa nhiều lần.. Đĩa này cũng có thể ghi được trên một
mặt đĩa, dung lượng ghi trên mỗi mặt tối đa là 4.7 GB.
Đặc trưng CD ROM DVD ROM
Kích thước pit 0.834 micron 0.4 micron
Khảng cách rãnh 1.6 micron 0.74 micron
Số lớp dữ liệu trên đĩa 1 lớp 2 lớp
Số mặt đĩa 1 mặt 1-2 mặt
Dung lượng 640-700MB 1.36 – 17GB
Độ phân giải 320x200 720x640

128
So sánh một số thông tin hai loại đĩa CDROM và DVDROM
9.4 Bàn phím
9.4.1 Cấu trúc và chức năng
Chip xử lý bàn phím liên tục kiểm tra trạng thái của ma trận quét (scan
matrix) để xác định công tắc tại các tọa độ X,Y đang được đóng hay mở và ghi một
mã tương ứng vào bộ đệm bên trong bàn phím. Sau đó mã này sẽ được truyền nối
tiếp tới mạch ghép nối bàn phím trong PC. Cấu trúc của SDU cho việc truyền số
liệu này và các chân cắm của đầu nối bàn phím.

STRT: bit start (luôn bằng 0)


DB0 - DB7: bit số liệu từ 0 đến 7.
PAR: bit parity (luôn lẻ)
STOP: bit stop (luôn bằng 1).

Hình 5.4: Sơ đồ nguyên lý và các ghép nối của bàn phím

Tín hiệu xung nhịp dùng cho việc trao đổi dữ liệu thông tin nối tiếp đồng bộ
với mạch ghép nối bàn phím (keyboard interface) trên main board được truyền qua
chân số 1. Một bộ điều khiển bàn phím đã được lắp đặt trên cơ sở các chíp 8042,

129
hoặc 8742,8741. Nó có thể được chương trình hóa (thí dụ khóa bàn phím) hơn nữa
số liệu có thể truyền theo 2 hướng từ bàn phím và mạch ghép nối, do vậy vi mã của
chíp bàn phím có thể giúp cho việc nhận lệnh điều khiển từ PC, thí dụ như đặt tốc
độ lặp lại của nhấn bàn phím,….

Hình 5.5: Đầu cắm bàn phím PS/2


9.4.2 Mã quét bàn phím
Mỗi phím nhấn sẽ được gán cho 1 mã quét (scan code) gồm 1 byte. Nếu 1
phím được nhấn thì bàn phím phát ra 1 mã make code tương ứng với mã quét
truyền tới mạch ghép nối bàn phím của PC. Ngắt cứng INT 09h được phát ra qua
IRQ1. Chương trình xử lý ngắt sẽ xử lý mã này tuỳ theo phím SHIFT có được
nhấn hay không. Ví dụ: nhấn phím SHIFT trước, không rời tay và sau đó nhấn ‘C’:
make code được truyền - 42(SHIFT) - 46 (‘C’).
Nếu rời tay nhấn phím SHIFT thì bàn phím sẽ phát ra break code và mã này
được truyền như make code. Mã này giống như mã quét nhưng bit 7 được đặt lên
1, do vậy nó tương đương với make code công với 128. Tuỳ theo break code,
chương trình con xử lý ngắt sẽ xác định trạng thái nhấn hay rời của các phím. Thí
dụ, phím SHIFT và ‘C’ được rời theo thứ tự ngược lại với thí dụ trên: break code
được truyền 174 ( bằng 46 cộng 128 tương ứng với ‘C’) và 170 (bằng 42 cộng 128
tương ứng với SHIFT). Phần cứng và phần mềm xử lý bàn phím còn giải quyết các
vấn đề vật lý sau:
- Nhấn và nhả phím nhưng không được phát hiện.
- Khử nhiễu rung cơ khí và phân biệt 1 phím được nhấn nhiều lần hay
được nhấn chỉ 1 lần nhưng được giữ trong một khoảng thời gian dài.

130
9.5 Chuột
9.5.1 Cấu tạo
Cấu tạo của chuột rất đơn giản, phần trung tâm là 1 viên bi thép được phủ
keo hoặc nhựa được quay khi dịch chuyển chuột. Chuyển động này được truyền tới
2 thanh nhỏ được đặt vuông góc với nhau. Các thanh này sẽ biến chuyển động của
chuột theo 2 hướng X,Y thành sự quay tưong ứng của 2 đĩa gắn với chúng. Trên 2
đĩa có những lỗ nhỏ liên tục đóng và ngắt 2 chùm sáng tới các sensor nhạy sáng để
tạo ra các xung điện. Số các xung điện tỷ lệ với lượng chuyển động của chuột theo
các hướng X,Y và số xung trên 1 sec biểu hiện tốc độ của chuyển động chuột. Kèm
theo đó có 2 hay 3 phím bấm.

Hình 5.6: Sơ đồ cấu tạo chuột

9.5.2 Mạch ghép nối và chương trình điều khiển chuột

131
Hầu hết chuột được nối với PC qua cổng nối tiếp, qua đó chuột cũng được
cấp nguồn nuôi từ PC. Khi dịch chuyển hoặc nhấn, nhả các phím chuột, nó sẽ phát
ra một gói các số liệu tới mạch giao tiếp và mạch sẽ phát ra 1 ngắt. Phần mềm điều
khiển chuột làm các nhiệm vụ: chuyển ngắt tới mạch giao tiếp nối tiếp xác định,
đọc gói số liệu và cập nhật các giá trị bên trong liên quan tới trạng thái của bàn
phím cũng như vị trí của chuột. Hơn nữa, nó còn cung cấp 1 giao tiếp mềm qua
ngắt của chuột là 33h để định các giá trị bên trong này cũng như làm dịch chuyển
con trỏ chuột trên màn hình tương ứng với vị trí của chuột. Có thể chọn kiểu con
trỏ chuột cứng hoặc mềm trong chế độ văn bản hay con trỏ chuột đồ hoạ trong chế
độ đồ họa. Các hàm 09h và 0Ah trong ngắt 33h cho phép định nghĩa loại và dạng
con trỏ chuột.

132

You might also like