Tài liệu Lập trình hệ thống - Chương 1: Kiến trúc và hoạt động của hệ vi xử lý/máy tính

Tài liệu Lập trình hệ thống  
Chương 1  
Chương 1  
KIẾN TRÚC VÀ HOẠT ĐỘNG CỦA HỆ VI XỬ LÝ /  
MÁY TÍNH  
1. Cấu trúc luận lý  
Máy tính số (Digital computer) là máy 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 (program).  
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 hợp các chỉ thị này gọi là tập lệnh của máy tính. 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. Các lệnh cơ  
bản là:  
- Cộng 2 số.  
- So sánh với 0.  
- Di chuyển dữ liệu.  
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ể tác động lên  
máy tính, ngôn ngữ này gọi là ngôn ngữ máy (machine language). Tuy nhiên, hầu hết các  
ngôn ngữ máy đều đơn giản nên để thực hiện một yêu cầu nào đó, người thiết kế phải  
thực hiện một công việc phức tạp. Đó là chuyển các yêu cầu này thành các chỉ thị có chứa  
trong tập lệnh của máy. Vấn đề này có thể giải quyết bằng cách thiết kế một tập lệnh mới  
thích hợp cho con người hơn tập lệnh đã cài đặt sẵn trong máy (built-in). 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).  
Tuy nhiên, trong thực tế, để có thể thực hiện được, các ngôn ngữ L1 và L2 không  
được khác nhau nhiều. Như vậy, ngôn ngữ L2 cũng không thật sự giúp ích nhiều cho  
người thiết kế. Do đó, một tập lệnh kế tiếp được hình thành sẽ hướng về con người nhiều  
hơn là máy tính, tập lệnh này sẽ 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.  
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.  
Sơ đồ một máy ảo n cấp có thể biểu diễn như sau:  
Phạm Hùng Kim Khánh  
Trang 1  
Tài liệu Lập trình hệ thống  
Chương 1  
Chương trình trong Ln được dịch thành  
Cấp n  
Máy ảo Mn dùng ngôn  
ngữ máy Ln  
ngôn ngữ của máy cấp thấp hơn  
Chương trình trong L3 được dịch thành  
ngôn ngữ L2 hay L1  
Cấp 3  
Cấp 2  
Cấp 1  
Máy ảo M3 dùng ngôn  
ngữ máy L3  
Chương trình trong L2 được dịch thành  
ngôn ngữ máy L1  
Máy ảo M2 dùng ngôn  
ngữ máy L2  
Chương trình trong L1 được thực thi trực  
tiếp bằng các mạch điện tử  
Máy tính số M1 dùng  
ngôn ngữ máy L1  
Hình 1.1. Máy ảo n cấp  
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ử.  
Phạm Hùng Kim Khánh  
Trang 2  
Tài liệu Lập trình hệ thống  
Chương 1  
Về cơ bản, máy tính gồm có 6 cấp:  
Cấp 5  
Cấp ngôn ngữ hướng vấn đề  
Dịch (chương trình dịch)  
Cấp 4  
Cấp ngôn ngữ hợp dịch  
Cấp hệ điều hành  
Cấp máy quy ước  
Cấp vi lập trình  
Dịch (hợp dịch)  
Cấp 3  
Cấp 2  
Cấp 1  
Cấp 0  
Dịch 1 phần (hệ điều hành)  
Thông dịch (vi chương trình)  
Vi chương trình (phần cứng)  
Cấp logic số  
Hình 1.2 – Các cấp trên máy tính số  
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ộ  
Phạm Hùng Kim Khánh  
Trang 3  
Tài liệu Lập trình hệ thống  
Chương 1  
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. Giao tiếp ngoại vi  
Ta phân biệt tất cả 3 phương pháp xuất / nhập dữ liệu:  
- Nhập / xuất bằng cách hỏi trạng thái của thiết bị ngoại vi (polling)  
- Nhập / xuất bằng ngắt (interrupt).  
- Nhập / xuất bằng cách truy xuất trực tiếp vào bộ nhớ dùng các phần cứng phụ  
trợ (DMA).  
2.1. Nhập / xuất dữ liệu bằng cách hỏi vòng (polling)  
Ta biết rằng vấn đề điều khiển nhập / xuất dữ liệu sẽ rất đơn giản trong trường hợp  
thiết bị ngoại vi lúc nào cũng có thể làm việc với μP. Ta có thể ví dụ như bộ hiển thị Led  
7 đoạn lúc nào cũng sẵn sàng hiển thị dữ liệu khi mà μP gởi dữ liệu ra. Tuy nhiên, trong  
thực tế, không phải lúc nào μP cũng làm việc với các thiết bị ngoại vi có tính năng như  
trên. Ví dụ như khi làm việc với một máy in, μP yêu cầu in nhưng máy in không sẵn sàng  
(giả sử như hết giấy, kẹt giấy, …). Khi đó, μP phải kiểm tra xem một thiết bị mà nó cần  
giao tiếp có sẵn sàng hay không nếu thiết bị sẵn sàng thì mới thực hiện trao đổi dữ liệu.  
Để kiểm tra các thiết bị ngoại vi, μP phải sử dụng các tín hiệu bắt tay (handshake) xác  
định tuần tự từng thiết bị, xem thiết bị nào có yêu cầu trao đổi dữ liệu. Các tín hiệu này  
lấy từ các mạch giao tiếp do người thiết kế tạo ra.  
Giả sử hệ thống có 2 thiết bị ngoại vi, nếu thiết bị 1 có dữ liệu cần truyền đến μP  
thì nó sẽ gởi 1 xung để chốt dữ liệu đồng thời tạo tín hiệu sẵn sàng cho thiết bị. Khi μP  
kiểm tra tín hiệu sẵn sàng của thiết bị 1 thì nó sẽ đọc dữ liệu vào từ mạch chốt và xoá tín  
hiệu sẵn sàng.  
Trong trường hợp μP muốn gởi dữ liệu ra thiết bị 2, nó sẽ đọc tín hiệu sẵn sàng của  
thiết bị 2, nếu thiết bị 2 có thể nhận dữ liệu thì μP sẽ gởi dữ liệu ra mạch chốt và thiết bị 2  
sẽ đọc dữ liệu vào.  
Phạm Hùng Kim Khánh  
Trang 4  
Tài liệu Lập trình hệ thống  
Chương 1  
2.2. Ngắt và xử lý ngắt  
Trong cách thức thực hiện trao đổi dữ liệu bằng cách hỏi vòng như trên, trước khi  
tiến hành thực hiện thì μP phải kiểm tra trạng thái sẵn sàng của thiết bị ngoại vi. Tuy  
nhiên trong thực tế ta cần phải tận dụng khả năng của μP để làm các công việc khác mà  
không phải tốn thời gian kiểm tra thiết bị, chỉ khi nào có yêu cầu trao đổi dữ liệu thì mới  
tạm dừng công việc hiện tại. Cách làm việc như vậy gọi là ngắt μP, khi có một ngắt xảy ra  
thì ta phải thực hiện gọi các chương trình phục vụ ngắt tại các địa chỉ xác định của μP.  
Các tín hiệu ngắt từ thiết bị ngoại vi đưa vào μP thông qua các chân NMI hay INTR.  
2.2.1. Các loại ngắt  
™ Ngắt cứng: là các yêu cầu ngắt từ các chân NMI hay INTR.  
Ngắt cứng NMI là ngắt không che được còn ngắt cứng INTR có thể che được. Các  
lệnh CLI (Clear Interrupt) và STI (Set Interrupt) chỉ ảnh hưởng đến việc μP có chấp nhận  
yêu cầu ngắt tại chân INTR hay không. Yêu cầu ngắt tại chân INTR có thể có các kiểu  
ngắt từ 00h ÷ FFh. Kiểu ngắt này sẽ được đưa vào bus dữ liệu để μP xác định kiểu ngắt  
(dùng cho các thiết bị ngoại vi khác nhau).  
1
2
40  
39  
38  
37  
36  
35  
34  
33  
32  
31  
30  
29  
28  
27  
26  
25  
24  
23  
22  
21  
GND  
AD14  
AD13  
AD12  
AD11  
AD10  
AD9  
VCC  
AD15  
3
A16/S3  
A17/S4  
A18/S5  
A19/S6  
BHE/S7  
MN/MX  
RD  
4
74LS245  
5
VCC  
1
19  
6
DIR  
7
G
8
AD8  
9
8
7
6
5
4
3
2
11  
12  
13  
14  
15  
16  
17  
18  
9
A8  
A7  
A6  
A5  
A4  
A3  
A2  
A1  
B8  
B7  
B6  
B5  
B4  
B3  
B2  
B1  
AD7  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
AD6 HOLD (RQ/GT0)  
AD5 HLDA (RQ/GT1)  
AD4  
AD3  
AD2  
AD1  
AD0  
NMI  
INTR  
CLK  
GND  
WR (LOCK)  
IO/M (S2)  
DT/R (S1)  
DEN (S0)  
ALE (QS0)  
INTA (QS1)  
TEST  
1
2
3
4
INT7  
INT6  
INT5  
INT4  
READY  
RESET  
8
8086  
5
6
11  
12  
INT3  
INT2  
INT1  
INT0  
Hình 1.3 – Kết nối ngắt đơn giản  
™ Ngắt mềm: là các ngắt thực hiện bằng phần mềm tác động do người sử dụng.  
2.2.2. Đáp ứng của μP khi có yêu cầu ngắt  
Khi có yêu cầu ngắt đến μP và nếu được phép ngắt, μP sẽ thực hiện các công việc  
sau:  
- [SP] ← SP – 2, [SP] ← FR (Flag Register): cất thanh ghi cờ vào stack.  
- IF ← 0, TF ← 0: không cho thực hiện các ngắt khác.  
- SP ← SP – 2, [SP] ← CS: cất địa chỉ đoạn mã vào stack.  
- SP ← SP – 2, [SP] ← IP: cất địa chỉ trở về sau khi phục vụ ngắt  
Phạm Hùng Kim Khánh  
Trang 5  
Tài liệu Lập trình hệ thống  
Chương 1  
- IP ← [Số_hiệu_ngắt*4], CS ← [Số_hiệu_ngắt*4 + 2]: lấy lệnh tại địa chỉ phục  
vụ ngắt tương ứng  
- Sau khi kết thúc chương trình con phục vụ ngắt (khi gặp lệnh IRET):  
+ IP ← [SP], SP ← SP + 2  
+ CS ← [SP], SP ← SP + 2: lấy lại địa chỉ trước khi gọi chương trình phục vụ  
ngắt  
+ FR ← [SP], SP ← SP + 2: lấy lại giá trị thanh ghi cờ  
2.2.3. Xử lý ưu tiên ngắt  
Như ta đã biết ở trên, khi μP đang thực hiện lệnh, nếu có ngắt xảy ra thì μP sẽ tạm  
ngừng chương trình và thực thi chương trình con phục vụ ngắt. Trong thực tế sẽ có trường  
hợp có nhiều yêu cầu ngắt khác nhau cùng một lúc, khi đó μP sẽ phục vụ cho ngắt theo  
thứ tự ưu tiên với nguyên tắc là ngắt nào có mức ưu tiên cao nhất thì sẽ phục vụ cho ngắt  
đó trước.  
Các mức ưu tiên của các ngắt (từ mức thấp nhất đến mức cao nhất):  
- Ngắt thực hiện chạy từng lệnh (INT 1)  
- Ngắt che được INTR  
- Ngắt không che được NMI  
- Ngắt nội bộ (INT 0: xảy ra do phép chia số 0, ngắt mềm)  
2.3. Nhập / xuất dữ liệu bằng DMA (Direct Memory Access)  
Trong các phương thức trao đổi dữ liệu như hai phần trên đã trình bày thì việc trao  
đổi dữ liệu giữa thiết bị ngoại vi và hệ thống thường theo trình tự sau: từ ngoại vi đến vi  
xử lý rồi đi vào bộ nhớ hay từ bộ nhớ đến vi xử lý rồi ghi ra ngoại vi. Trong thực tế sẽ  
có trường hợp ta cần thực hiện trao đổi dữ liệu ngay giữa ngoại vi và bộ nhớ. Khi đó  
người ta đưa ra cơ chế truy xuất bộ nhớ trực tiếp (DMA). Để thực hiện được vấn đề này,  
các hệ vi xử lý thông thường dùng thêm các mạch chuyên dụng để điều khiển quá trình  
truy xuất bộ nhớ trực tiếp (DMAC – Direct Memory Access Controller). Có tất cả 3 cơ  
chế hoạt động:  
¾ Tận dụng thời gian CPU không dùng bus:  
Ta phải dùng thêm mạch phát hiện các chu kỳ xử lý nội của CPU và tận dụng các  
chu kỳ này để thực hiện trao đổi dữ liệu.  
¾ Treo CPU để trao đổi từng byte:  
CPU không bị treo trong khoảng thời gian dài mà chỉ bị treo trong thời gian ngắn  
đủ để trao đổi 1 byte dữ liệu giữa bộ nhớ và ngoại vi. Do đó, công việc của CPU không bị  
gián đoạn mà chỉ bị chậm đi.  
¾ Treo CPU một khoảng thời gian để trao đổi một khối dữ liệu:  
Trong cơ chế này, CPU bị treo trong suốt quá trình trao đổi dữ liệu.  
- CPU ghi từ lệnh và từ chế độ làm việc vào DMAC.  
- Khi thiết bị ngoại vi có yêu cầu trao đổi dữ liệu, nó gởi tín hiệu DRQ = 1  
(DMA Request) đến DMAC.  
Phạm Hùng Kim Khánh  
Trang 6  
Tài liệu Lập trình hệ thống  
Chương 1  
- DMAC gởi tín hiệu HRQ (Hold Request) đến chân HOLD của CPU để yêu cầu  
treo CPU. Tín hiệu này sẽ giữ ở mức cao cho đến hết quá trình trao đổi dữ liệu.  
- Sau khi nhận yêu cầu treo, CPU sẽ thực hiện hết chu kỳ bus của m?nh rồi treo  
các bus và gởi tín hiệu HLDA (Hold Acknowledge) để báo cho DMAC biết có  
thể sử dụng các bus.  
- DMAC chuyển dữ liệu từ bộ nhớ đến ngoại vi bằng cách: đưa địa chỉ byte đầu  
tiên ra bus địa chỉ và đưa tín hiệu MEMR để đọc 1 byte từ bộ nhớ, kế tiếp  
DMAC đưa tín hiệu IOW để ghi dữ liệu ra ngoại vi. Sau đó, DMAC giảm số  
byte cần truyền, cập nhật địa chỉ bộ nhớ và lặp lại quá trình cho đến khi hết  
byte cần truyền.  
Address bus  
μP  
Data bus  
DMAC  
HRQ DRQ  
HACK DACK  
I/O  
DRQ  
DACK  
Memory  
HOLD  
HLDA  
Control bus  
Hình 1.4 – Giao tiếp DMAC với hệ vi xử lý  
Hai tín hiệu dùng để yêu cầu treo và chấp nhận yêu cầu treo CPU dùng cho cơ chế  
DMA là HOLD và HLDA có thể mô tả như sau:  
T4 hay T1  
CLK  
HOLD  
HLDA  
Hình 1.5 – Tín hiệu HOLD và HLDA  
Phạm Hùng Kim Khánh  
Trang 7  
Tài liệu Lập trình hệ thống  
Chương 1  
3. Bus  
CPU  
Bus hệ thống (system bus)  
Registers  
ALU  
Memory  
board  
I/O  
board  
Bus nội (on-chip bus)  
Bus cục bộ  
(local bus)  
Đồng xử lý  
Hình 1.6 - Các bus trong một hệ thống máy tính  
Bus là đường truyền tín hiệu điện nối các thiết bị khác nhau trong một hệ thống  
máy tính. Bus thường có từ 50 đến 100 dây dẫn được gắn trên mainboard, trên các dây  
này có các đầu nối đưa ra, các đầu này được sắp xếp và cách nhau những khoảng quy  
định để có thể cắm vào đó những I/O board hay board bộ nhớ (bus hệ thống – system  
bus).  
Cũng có những bus dùng cho mục đích chuyên biệt, thí dụ nối 1 vi xử lý với 1 hay  
nhiều vi xử lý khác hoặc nối với bộ nhớ cục bộ (local bus).  
Trong vi xử lý cũng có một số bus để nối các thành phần bên trong của bộ vi xử lý  
với nhau. Người thiết kế chip vi xử lý có thể tuỳ ý lựa chọn loại bus bên trong nó, còn với  
các bus liên hệ 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í của bus để người thiết kế mainboard có thể ghép nối chip  
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 1 chuẩn nào đó.  
Tập các quy tắc của chuẩn còn được gọi là giao thức bus (bus protocol)  
Thường có nhiều thiết bị nối với bus, một số thiết bị là tích cực (active) có thể đòi  
hỏi truyền thông trên bus, trong khi đó có các thiết bị thụ động chờ 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ủ (master) còn thiết bị thụ động là tớ (slave).  
Ví dụ: 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òn bộ điều khiển đĩa là slave. Tuy nhiên, bộ điều khiển đĩa ra lệnh cho bộ nhớ  
nhận dữ liệu thì nó lại giữ vai trò master.  
Phạm Hùng Kim Khánh  
Trang 8  
Tài liệu Lập trình hệ thống  
Chương 1  
3.1. Bus Driver và Bus Receiver  
Tín hiệu điện trong máy tính phát ra thường không đủ để điều khiển bus, nhất là  
khi bus khá dài và có nhiều thiết bị nối với nó. Chính vì thế mà hầu hết các bus master  
được nối với bus thông qua 1 chip gọi là bus driver, về cơ bản nó là một bộ khuếch đại tín  
hiệu số. Tương tự như vậy, hầu hết các slave được nối với bus thông qua bus receiver.  
Đối với các thiết bị khi thì đóng vai trò master, khi thì đóng vai trò slave, người ta sử  
dụng 1 chip kết hợp gọi là transceiver. Các chip này đóng vai trò ghép nối và là các thiết  
bị 3 trạng thái, cho phép nó có thể ở trạng thái thứ 3 – hở mạch (thả nổi).  
Giống như vi xử lý, 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 có ánh xạ 1 – 1 giữa các tín hiệu ở các chân ra của vi xử lý và  
các đường dây của bus. Thí dụ: một số chíp vi xử lý có 3 chân ra, truyền ra các tín hiệu  
báo chíp vi xử lý đang thực hiện các thao tác MEMR , MEMW , IOR , IOW hay thao  
tác khác. Một bus điển hình thường có 4 đường trên.  
Các vấn đề quan trọng nhất liên quan đến thiết kế bus là: xung clock bus (sự phân  
chia thời gian, hay còn gọi là bus blocking), cơ chế phân xử 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 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 clock bus.  
3.2. Bus đồng bộ (Synchronous bus)  
Mỗi chu kỳ bus bắt đầu bằng việc xuất địa chỉ bộ nhớ hoặc I/O port (chu kỳ xung  
nhịp T1). Bus điều khiển có 4 tín hiệu tác động mức thấp làMEMR, MEMW , IOR và  
IOW .  
Các chuỗi sự kiện xảy ra trong một chu kỳ bus đọc bộ nhớ:  
T1: μP xuất địa chỉ bộ nhớ 20 bit. Các đường dữ liệu không hoạt động và các  
đường điều khiển bị cấm  
T2: Đường điều khiển MEMR xuống mức thấp. Đơn vị bộ nhớ ghi nhận chu kỳ  
bus này là quá trình đọc bộ nhớ và đặt byte hay word có địa chỉ đó lên data bus.  
T3: μP đặt cấu hình để các đường data bus là nhập. Trạng thái này chủ yếu để bộ  
nhớ có thời gian tìm kiếm byte hay word dữ liệu  
T4: μP đợi dữ liệu trên data bus. Do đó, nó thực hiện chốt data bus và giải phóng  
các đường điều khiển đọc bộ nhớ. Quá trình này sẽ kết thúc chu kỳ bus.  
Phạm Hùng Kim Khánh  
Trang 9  
Tài liệu Lập trình hệ thống  
Chương 1  
T1  
T2  
T3  
T4  
Clk  
Address  
bus  
Địa chỉ  
Đọc bộ  
nhớ hay  
I/O  
IOR hay  
MEMR  
Data bus  
Dữ liệu vào  
Address  
bus  
Địa chỉ  
Ghi bộ  
nhớ hay  
I/O  
IOW  
MEMW  
hay  
Dữ liệu ra  
Data bus  
Hình 1.7 – Định thì chu kỳ bus đồng bộ  
Trong một chu kỳ bus, μP có thể thực hiện đọc I/O, ghi I/O, đọc bộ nhớ hay ghi bộ  
nhớ. Các đường address bus và control bus dùng để xác định địa chỉ bộ nhớ hay I/O và  
hướng truyền dữ liệu trên data bus.  
Chú ý rằng μP điều khiển tất cả các quá trình trên nên bộ nhớ bắt buộc phải cung  
cấp được dữ liệu vào lúc MEMR lên mức cao trong trạng thái T4. Nếu không, μP sẽ đọc  
dữ liệu ngẫu nhiên không mong muốn trên data bus. Để giải quyết vấn đề này, ta có thể  
dùng thêm các trạng thái chờ (wait state).  
™ Truyền theo khối:  
Ngoài các chu kỳ đọc/ghi, một số bus truyền dữ liệu đồng bộ còn hỗ trợ truyền dữ  
liệu theo khối. Khi bắt đầu thao tác đọc khối, bus master báo cho slave biết số byte cần  
được truyền đi, thí dụ truyền con số này đi trong chu kỳ T1, sau đó đáng lẽ truyền đi 1  
byte, slave đưa ra trong mỗi chu kỳ 1 byte cho tới 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ỳ clock chứ không phải 3n  
chu kỳ.  
Một cách khác để cho truyền dữ liệu nhanh hơn là giảm chu kỳ. Tuy nhiên, giảm  
chu kỳ bus dẫn đến khó khăn về mặt kỹ thuật, các tín hiệu truyền trên các đường khác  
nhau không phải luôn có cùng tốc độ, dẫn đến hiệu ứng bus skew. Điều quan trọng là thời  
Phạm Hùng Kim Khánh  
Trang 10  
Tài liệu Lập trình hệ thống  
Chương 1  
gian chu kỳ phải dài hơn so với skew để tránh việc những khoảng thời gian được số hoá  
lại trở thành các đại lượng biến thiên liên tục.  
3.3. Bus bất đồng bộ( Asynchronous bus)  
Bus bất đồng bộ không sử dụng xung clock đồng bộ, 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ị khác nhau. Làm việc với các 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. Mọi công việc được tiến hành trong khoảng thời gian là bội số  
của xung clock, nếu 1 thao tác nào đó của vi xử lý hay bộ nhớ hoàn thành trong 3.1 chu  
kỳ thì nó cũng sẽ phải kéo dài trong 4 chu kỳ. Khi đã 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 những tiến bộ của công nghệ. Chẳng  
hạn sau khi đã xây bus với sự định thời như trên, công nghệ mới đưa ra các vi xử lý và bộ  
nhớ có thời gian chu kỳ là 100ns chứ không còn là 750ns như cũ, thì chúng vẫn chạy với  
tốc độ thấp như các vi xử lý, bộ nhớ loại cũ, bởi vì giao thức bus đòi hỏi bộ nhớ phải đưa  
được dữ liệu ra và ổn định trước thời điểm cạnh âm của T3. Nếu có nhiều thiết bị khác  
nhau cùng nối với 1 bus, trong đó có thể có một số thiết bị hoạt động nhanh hơn 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ị có tốc độ thấp nhất.  
Bus bất đồng bộ ra đời nhằm khắc phục những nhược điểm của bus đồng bộ.  
Trước hết master phát ra địa chỉ nhớ mà nó muốn truy cập, sau đó phát tín hiệu MEMR  
tích cực để xác định cần truy xuất bộ nhớ và yêu cầu quá trình truy xuất là READ để xác  
định chiều truyền dữ liệu. Tín hiệu MEMR được đưa ra sau tín hiệu địa chỉ một khoảng  
thời gian phụ thuộc tốc độ hoạt động của master. Sau khi 2 tín hiệu này đã ổn định, master  
sẽ phát ra tín hiệu MSYN (master synchrization) ở 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 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, đưa dữ  
liệu của ô nhớ được 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.  
Address  
MEMR  
(Control)  
MSYN  
Data  
SSYN  
Hình 1.8 – Định thì chu kỳ bus bất đồng bộ  
Phạm Hùng Kim Khánh  
Trang 11  
Tài liệu Lập trình hệ thống  
Chương 1  
Master nhận được tín hiệu SSYN tích cực thì xác định được dữ liệu của slave đã  
sẵn sàng nên 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 MEMR và MSYN . Khi slave nhận được tín hiệu MSYN không tích cực, nó xác  
định kết thúc chu kỳ và đảo tín hiệu SSYN làm bus trở lại trạng thái ban đầu, mọi tín hiệu  
đều không tích cực, chờ bus master mới.  
Trên giản đồ thời gian của bus bất đồng bộ, ta sử dụng mũi tên để thể hiện nguyên  
nhân và kết quả. MSYN 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ỉ, MEMR 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 chu kỳ. Tập các tín hiệu phối  
hợp với nhau như vậy được gọi là bắt tay toàn phần (full handshake), chủ yếu gồm 4 tín  
hiệu sau:  
- MSYN tích cực.  
- SSYN tích cực để đáp lại tín hiệu MSYN .  
- MSYN được đảo để đáp lại tín hiệu SSYN (tích cực).  
- SSYN được đảo để đáp lại tín hiệu MSYN không tích cực.  
Ta có thể nhận thấy bắt tay toàn phần là độc lập thời gian, mỗi sự kiện được gây ra  
bởi 1 sự kiện trước đó chứ không phải bởi xung clock. Nếu 1 cặp master-slave nào đó  
hoạt động chậm thì cặp master-slave kế tiếp không hề bị ảnh hưởng.  
Tuy ưu điểm của bus bất đồng bộ rất rõ ràng, nhưng trong thực tế phần lớn các bus  
đang sử dụng là loại đồng bộ. Nguyên nhân là các hệ thống sử dụng bus đồng bộ dễ thiết  
kế hơn. Vi xử lý 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à bộ  
nhớ đáp ứng ngay, không cần tín hiệu phản hồi. Chỉ cần các chọn phù hợp thì mọi hoạt  
động đều trôi chảy, không cần phải bắt tay.  
3.4. Xử lý ngắt  
Ở trên, ta chỉ khảo sát các chu kỳ bus thông thường, trong đó master nhận hay gởi  
thông tin từ / đến slave. Một ứng dụng quan trọng nữa của bus là dùng để xử lý ngắt. Khi  
CPU ra lệnh cho thiết bị I/O làm một việc gì đó, 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 sẽ đáp ứng ngay, có thể nhận dữ liệu do thiết bị I/O truyền về, hay gởi tiếp dữ liệu ra  
thiết bị I/O, hay CPU sẽ 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 sử dụng bus.  
Vì có thể nhiều thiết bị ngoại vi cùng phát ra ngắt, cho nên cần có 1 cơ chế phân  
xử 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 1 arbiter 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. Hiện trên thị trường có những chip điều khiển  
ngắt được tiêu chuẩn hóa và được sử dụng rộng rãi là chip 8259A. Có thể nối 8 chip điều  
khiển I/O tới các đầu IRx (Interrupt request) của 8259A. Khi có 1 thiết bị nào đó muốn  
ngắt, nó đặt mức tích cực lên chân Irx, 8259A nhận được tín hiệu tích cực ở 1 hay một số  
Phạm Hùng Kim Khánh  
Trang 12  
Tài liệu Lập trình hệ thống  
Chương 1  
đầu vào Irx thì sẽ đặt mức tích cực lên đầu dây INT. Tín hiệu INT sẽ truyền trực tiếp đến  
chân Interrupt của CPU. Khi CPU có thể xử lý được ngắt, nó gởi lại 1 tín hiệu chấp nhận  
ngắt cho 8259A. Lúc này, CPU chờ 8259A chỉ ra I/O nào yêu cầu ngắt, bằng cách gởi số  
hiệu của I/O đó lên bus dữ liệu (D0-D7) để đi đến CPU. Sau đó, phần cứng CPU sẽ sử  
dụng con số đó để tính chỉ số trong 1 bảng con trỏ -bảng vector ngắt (interrupt vector) để  
tìm địa chỉ chương trình con, cho chạy chương trình này để phục vụ ngắt. Các chương  
trình con này gọi là chương trình con xử lý ngắt.  
4. Các chip hỗ trợ cho bộ xử lý trung tâm  
4.1. Mạch tạo xung clock 8284  
1
2
3
4
5
6
7
8
9
18  
17  
16  
15  
14  
13  
12  
11  
10  
CSYNC  
PCLK  
VCC  
X1  
AEN1  
X2  
RDY1 ASYNC  
READY  
RD2  
EFI  
F/C  
AEN2  
CLK  
OSC  
RES  
GND  
RESET  
8284  
Hình 1.9 – Mạch tạo xung clock 8284  
PCLK (Peripheral Clock): xung clock f = fX/6 (fX là tần số thạch anh) với chu kỳ  
bổn phận 50%.  
CSYNC (Clock Synchronisation): ngõ vào xung đồng bộ chung khi hệ thống có  
các 8284 dùng dao động ngoài tại chân EFI. Khi dùng mạch dao động trong thì phải nối  
GND.  
AEN1 , AEN 2 (Address Enable): cho phép chọn các chân tương ứng RDY1,  
RDY2 báo hiệu trạng thái sẵn sàng của bộ nhớ hay thiết bị ngoại vi.  
RDY1, RDY2 (Bus ready): kết hợp với AEN1, AEN2 tạo các chu kỳ đợi ở CPU  
READY: nối đến chân READY của μP.  
CLK (Clock): xung clock f = fX/3, nối với chân CLK của CPU.  
RESET: nối với chân RESET của CPU, là tín hiệu khởi động lại toàn hệ thống.  
RES (Reset Input): chân khởi động cho 8284, được nối với mạch RC để tự khởi  
động khi bật nguồn.  
OSC: ngõ ra xung clock có tần số fX.  
F/C (Frequency / Crystal): chọn nguồn tín hiệu chuẩn cho 8284, nếu ở mức cao  
thì chọn tần số xung clock bên ngoài, ngược lại thì dùng xung clock từ thạch anh.  
EFI (External Frequency Input): xung clock từ bộ dao động ngoài.  
Phạm Hùng Kim Khánh  
Trang 13  
Tài liệu Lập trình hệ thống  
Chương 1  
ASYNC : chọn chế độ làm việc cho tín hiệu RDY. Nếu ASYNC = 1, tín hiệu  
RDY có ảnh hưởng đến tín hiệu READY cho đến khi có xung âm của xung clock. Ngược  
lại thì RDY chỉ ảnh hưởng khi xuất hiện xung âm.  
X1,X2: ngõ vào của thạch anh, dùng để tạo xung chuẩn cho hệ thống.  
18  
17  
16  
15  
14  
13  
12  
11  
10  
1
2
3
4
5
6
7
8
9
VCC  
X1  
CSYNC  
PCLK  
X2  
AEN1  
ASYNC RDY1  
EFI  
F/C  
READY  
RD2  
OSC  
RES  
RESET  
AEN2  
CLK  
GND  
8284  
Vcc  
+
Hình 1.10 – Mạch khởi động cho 8284  
4.2. Mạch định thời PIT – 8253 / 8254 (Programmable Interval Timer)  
19  
20  
10  
13  
17  
A0  
A1  
OUT0  
OUT1  
OUT2  
11  
14  
16  
G0  
G1  
G2  
8
7
6
5
4
3
2
1
D0  
D1  
D2  
D3  
D4  
D5  
D6  
D7  
9
15  
18  
CLK0  
CLK1  
CLK2  
22  
23  
21  
RD  
WR  
CS  
8253  
Hình 1.11 – Sơ đồ chân của PIT 8253  
Phạm Hùng Kim Khánh  
Trang 14  
Tài liệu Lập trình hệ thống  
Chương 1  
OUT0  
CLK0  
GATE0  
D7 ÷ D0  
Đệm dữ  
liệu  
Bộ đếm  
0
OUT1  
CLK1  
GATE1  
RD  
Điều  
khiển  
đọc/ghi  
Bộ đếm  
WR  
A1  
1
A0  
CS  
OUT2  
CLK2  
GATE2  
Thanh  
ghi từ  
điều  
Bộ đếm  
2
khiển  
Hình 1.12 – Sơ đồ khối của PIT 8253  
D7 ÷ D0: bus dữ liệu  
CLK0 ÷ CLK2: ngõ vào xung clock cho các bộ đếm  
OUT0 ÷ OUT2: ngõ ra bộ đếm  
RD , WR : cho phép CPU đọc / ghi dữ liệu từ / đến các thanh ghi của 8253  
A1, A0: giải mã chọn bộ đếm hay thanh ghi điều khiển, thường được nối với bus  
địa chỉ của CPU  
A1 A0 Chọn  
0
0
1
1
0
1
0
1
Bộ đếm 0  
Bộ đếm 1  
Bộ đếm 2  
Thanh ghi từ điều khiển  
G0 ÷ G2 (Gate): cho phép hay cấm các bộ đếm hoạt động ( =1: cho phép, =0:  
PIT 8253 có tất cả 5 chế độ đếm tùy thuộc vào giá trị trong thanh ghi điều khiển.  
cấm).  
Phạm Hùng Kim Khánh  
Trang 15  
Tài liệu Lập trình hệ thống  
Chương 1  
SC1 SC0 RW1 RW0 M2 M1 M0 BCD  
Chọn bộ đếm  
Định dạng đếm  
00: bộ đếm 0  
0: đếm nhị phân  
01: bộ đếm 1  
10: bộ đếm 2  
1: đếm BCD (0 ÷ 999)  
11: đọc CWR trong 8254  
Quy định phương thức  
đọc/ghi  
00: chốt bộ đếm  
01: đọc/ghi byte thấp  
10: đọc/ghi byte cao  
11: đọc/ghi byte thấp  
trước, byte cao sau  
Chế độ đếm  
000: chế độ 0  
001: chế độ 1  
010: chế độ 2  
011: chế độ 3  
100: chế độ 4  
101: chế độ 5  
Hình 1.13 – Dạng từ điều khiển của 8253  
PIT 8253 có 3 bộ đếm lùi 16 bit có thể lập trình và độc lập với nhau. Mỗi bộ đếm  
có tín hiệu xung clock riêng (8254 tương tự như 8253 nhưng có thêm lệnh đọc thanh ghi  
từ điều khiển CWR).  
™ Các chế độ đếm:  
Chế độ 0 (Interrupt on Terminal Count): tín hiệu ngõ ra ở mức thấp cho tới khi bộ  
đếm tràn thì sẽ chuyển lên mức cao.  
Chế độ 1 (Programmable Monoflop): tín hiệu ngõ ra chuyển xuống mức thấp tại  
cạnh âm của xung clock đầu tiên và sẽ chuyển lên mức cao khi bộ đếm kết thúc.  
Chế độ 2 (Rate Generator): tín hiệu ngõ ra xuống mức thấp trong chu kỳ đầu tiên  
và sau đó chuyển lên mức cao trong các chu kỳ còn lại.  
Chế độ 3 (Square-Wave Generator): tương tự như chế độ 2 nhưng xung ngõ ra là  
sóng vuông khi giá trị đếm chẵn và sẽ thêm một chu kỳ ở mức cao khi giá trị đếm lẻ.  
Chế độ 4 (Software-triggered Pulse): giống như chế độ 2 nhưng xung Gate không  
khởi động quá trình đếm mà sẽ đếm ngay khi số đếm ban đầu được nạp. Ngõ ra ở mức  
cao để đếm và xuống mức thấp trong chu kỳ xung đếm. Sau đó, ngõ ra sẽ trở lại mức cao.  
Chế độ 5 (Hardware-triggered Pulse): giống như chế độ 2 nhưng xung Gate không  
khởi động quá trình đếm mà được khởi động bằng cạnh dương của xung clock ngõ vào.  
Ngõ ra ở mức cao và xuống mức thấp sau một chu kỳ clock khi quá trình đếm kết thúc.  
Phạm Hùng Kim Khánh  
Trang 16  
Tài liệu Lập trình hệ thống  
Chương 1  
™ Ba chức năng của 8253 trong PC:  
Cập nhật đồng hồ hệ thống: bộ đếm 0 của PIT phát tuần hoàn một ngắt cứng qua  
IRQ0 của 8259 để CPU có thể thay đổi đồng hồ hệ thống. Bộ đếm hoạt động trong chế độ  
2. Ngõ vào được cấp xung clock tần số 1.19318 MHz. G0 = 1 để bộ đếm luôn được phép  
đếm. Giá trị ban đầu được nạp là 0 cho phép PIT phát ra xung chính xác với tần  
số:1.19318/65536 = 18.206Hz. Cạnh dương của mỗi xung này sẽ tạo ra một ngắt cứng  
trong 8259. Yêu cầu này sẽ dẫn tới ngắt 08h để cập nhật đồng hổ hệ thống 18.206 lần  
trong 1 giây.  
Làm tươi bộ nhớ: PIT nối với chip DMAC dùng làm tươi bộ nhớ DRAM. Bộ đếm  
1 sẽ định kỳ kích hoạt kênh 0 của DMAC-8237A để tiến hành 1 chu trình đọc giả làm  
tươi bộ nhớ. Bộ nhớ 1 hoạt động trong chế độ 3 phát sóng vuông với giá trị nạp ban đầu là  
18. Do đó sóng vuông được phát ra có tần số 1,19318 MHz/18 = 66288 Hz (chu kỳ bằng  
0.015s). Như vậy cứ sau 15 ms cạnh dương của sóng vuông này sẽ tạo 1 chu kỳ đọc giả  
để làm tươi bộ nhớ.  
Phát sóng âm với tần số biến đổi ra loa của PC: Bộ đếm 2 của PIT được dùng để  
phát sóng âm ra loa của PC.  
4.3. Mạch điều khiển bus 8288  
Mạch điều khiển bus 8288 lấy một số tín hiệu điều khiển của CPU và cung cấp các  
tín hiệu điều khiển cần thiết cho hệ vi xử lý.  
1
2
20  
19  
18  
17  
16  
15  
14  
13  
12  
11  
IOB  
CLK  
S1  
VCC  
S0  
3
S2  
4
DT/R MCE/PDEN  
5
ALE  
AEN  
MRDC  
AMWC  
MWTC  
GND  
DEN  
CEN  
INTA  
6
7
8
IORC  
AIOWC  
IOWC  
9
10  
8288  
Hình 1.14 – Mạch điều khiển bus 8288  
IOB (Input / Output Bus Mode): điều khiển để 8288 làm việc ở các chế độ bus  
khác nhau.  
CLK (Clock): ngõ vào lấy từ xung clock hệ thống (từ 8284) và dùng để đồng bộ  
toàn bộ các xung điều khiển đi ra từ mạch 8288.  
DT/ R (Data Transmit/Receive): CPU truyền (1) hay nhận (0) dữ liệu.  
ALE (Address Latch Enable): tín hiệu cho phép chốt địa chỉ, tín hiệu này thường  
được nối với chân G của 74573 để điếu khiển chốt địa chỉ.  
AEN (Address Enable): chờ thời gian trễ khoảng 150 ns sẽ tạo các tín hiệu điều  
khiển ở đầu ra của 8288 để đảm bảo rằng địa chỉ sử dụng đã hợp lệ.  
S2 , S1 , S0 : các tín hiệu trạng thái lấy trực tiếp từ CPU. Tuỳ theo các giá trị nhận  
được mà 8288 sẽ đưa các tín hiệu theo bảng:  
Phạm Hùng Kim Khánh  
Trang 17  
Tài liệu Lập trình hệ thống  
Chương 1  
Tạo tín hiệu  
S2  
0
S0  
0
S1  
0
INTA  
IORC  
0
0
1
1
0
0
IOWC AIOWC  
,
0
1
1
0
1
0
Không  
MRDC  
MRDC  
1
1
0
1
1
0
MWTC AMWC  
,
1
1
1
Không  
MRDC (Memory Read Command): điều khiển đọc bộ nhớ  
MWTC (Memory Write Command): điều khiển ghi bộ nhớ  
AMWC (Advanced MWTC),: giống như MWTC nhưng hoạt động sớm hơn một  
chút dùng cho các bộ nhớ chậm đáp ứng kịp tốc độ CPU.  
IOWC (I/O Write Command): điều khiển ghi ngoại vi  
AIOWC (Advanced IOWC),: giống như IOWC nhưng hoạt động sớm hơn một  
chút dùng cho các ngoại vi chậm đáp ứng kịp tốc độ CPU.  
IORC (I/O Read Command): điều khiển đọc ngoại vi  
INTA (Interrupt Acknowledge): ngõ ra thông báo CPU chấp nhận yêu cầu ngắt  
của thiết bị ngoại vi  
CEN (Command Enable): cho phép đưa ra tín hiệu DEN và các tín hiệu điều khiển  
khác của 8288.  
DEN (Data Enable): điều khiển bus dữ liệu thành bus cục bộ hay bus hệ thống.  
MCE / PDEN (Master Cascade Enable / Peripheral Data Enable): định chế độ làm  
việc cho mạch điều khiển ngắt PIC 8259 để nó làm việc ở chế độ master.  
Phạm Hùng Kim Khánh  
Trang 18  
Tài liệu Lập trình hệ thống  
Chương 1  
4.4. Chip điều khiển ngắt ưu tiên PIC 8259A (Priority Interrupt Controller)  
18  
19  
20  
21  
22  
23  
24  
25  
11  
10  
9
IR0  
IR1  
IR2  
IR3  
IR4  
IR5  
IR6  
IR7  
D0  
D1  
D2  
D3  
D4  
D5  
D6  
D7  
8
7
6
5
4
27  
12  
13  
15  
A0  
CAS0  
CAS1  
CAS2  
26  
3
2
1
INTA  
RD  
WR  
CS  
16  
17  
SP/EN  
INT  
8259A  
Hình 1.15 – Sơ đồ chân của 8259A  
Trong trường hợp nhiều yêu cầu ngắt cần phải phục vụ, ta thường dùng vi mạch  
8259A để giải quyết vấn đề ưu tiên. 8259A có thể giải quyết được 8 yêu cầu ngắt với 8  
mức ưu tiên khác nhau.  
™ Các khối chức năng:  
IRR (thanh ghi yêu cầu ngắt): lưu trữ các yêu cầu ngắt tại ngõ vào  
ISR (thanh ghi phục vụ ngắt): lưu trữ các yêu cầu ngắt đang phục vụ  
IMR (thanh ghi mặt nạ ngắt): lưu trữ mặt nạ của các yêu cầu ngắt tại ngõ vào  
Control logic (logic điều khiển): gởi yêu cầu ngắt tới chân INTR của CPU khi có  
tín hiệu ngắt tại ngõ vào của 8259A và nhận trả lời chấp nhận yêu cầu ngắt hay không  
INTA từ CPU để đưa kiểu ngắt vào CPU.  
Data bus buffer (đệm bus dữ liệu): giao tiếp giữa 8259A với bus dữ liệu của CPU.  
Cascade buffer / comparator (đệm nối tầng và so sánh): lưu trữ và so sánh số hiệu  
của các kiểu ngắt trong trường hợp dùng nhiều mạch 8259A.  
Phạm Hùng Kim Khánh  
Trang 19  
Tài liệu Lập trình hệ thống  
Chương 1  
INT  
INTA  
Data bus  
buffer  
Control logic  
ISR  
PR  
(Priority  
Resolver)  
IRR  
(Interrupt  
Request  
RD  
IR0  
Read /  
Write  
Logic  
(Interrupt  
Service  
Register)  
WR  
IR1  
A0  
Register)  
IR7  
CS  
CAS0  
CAS1  
Cascade  
buffer /  
IMR (Interrupt Mask Register)  
comparator  
CAS2  
SP / EN  
Hình 1.16 – Sơ đồ khối của PIC 8259A  
™ Các tín hiệu điều khiển:  
CAS0 ÷ 2 (In, Out): các ngõ vào chọn mạch 8259A tớ (slave) từ mạch 8259A chủ  
(master) trong trường hợp dùng nhiều mạch 8259A để tăng yêu cầu ngắt.  
SP / EN (In, Out) (Slave Program / Enable Buffer): nếu 8259A hoạt động ở chế  
độ không dùng đệm dữ liệu thì tín hiệu này dùng để xác định mạch 8259A là mạch chủ  
(SP = 1) hay tớ (SP = 0). Nếu 8259A hoạt động ở chế độ có đệm dữ liệu thì tín hiệu này  
dùng để cho phép giao tiếp giữa 8259A và CPU, khi đó mạch 8259A là master hay slave  
phải dựa vào từ lệnh khởi động ICW4.  
INT (Out): tín hiệu yêu cầu ngắt đưa đến CPU (chân INTR).  
INTA (In): nhận trả lời chấp nhận ngắt hay không từ CPU (chân INTA)  
A0: cho phép chọn các từ điều khiển của 8259A.  
8259A cho phép xử lý 8 ngắt với 8 mức ưu tiên khác nhau. Trong trường hợp hệ  
thống có số lượng ngắt lớn hơn thì có thể mắc nhiều 8259A liên tầng.  
Phạm Hùng Kim Khánh  
Trang 20  
Tải về để xem bản đầy đủ
pdf 32 trang myanh 24120 Free
Bạn đang xem 20 trang mẫu của tài liệu "Tài liệu Lập trình hệ thống - Chương 1: Kiến trúc và hoạt động của hệ vi xử lý/máy tính", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdftai_lieu_lap_trinh_he_thong_chuong_1_kien_truc_va_hoat_dong.pdf