« Home « Kết quả tìm kiếm

Tài liệu Lập trình hệ thống


Tóm tắt Xem thử

- Di chuyển 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.
- 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.
- FR (Flag Register): cất thanh ghi cờ vào stack.
- 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.
- 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 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.
- Address bus μP Data bus DMAC I/O Memory HOLD HRQ DRQ DRQ HLDA HACK DACK DACK 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 Registers Bus hệ thống (system bus) ALU Memory I/O board 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 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ó.
- 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.
- 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 đườ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.
- 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.
- 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 .
- 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ỳ.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- Mạch định thời PIT Programmable Interval Timer) 19 10 20 A0 OUT0 13 A1 OUT1 17 11 OUT2 14 G0 8 16 G1 D0 7 G2 D1 6 9 D2 5 15 CLK0 D3 4 18 CLK1 D4 3 CLK2 D5 2 22 D6 1 23 RD D7 21 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 D7 ÷ D0 Đệm dữ Bộ đếm liệu 0 CLK0 GATE0 RD OUT1 Điều Bộ đếm BUS NỘI WR khiển 1 CLK1 A1 đọc/ghi GATE1 A0 CS OUT2 Thanh Bộ đếm ghi từ 2 CLK2 điều GATE2 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 Bộ đếm 0 0 1 Bộ đếm 1 1 0 Bộ đếm 2 1 1 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: cấm).
- PIT 8253 có tất cả 5 chế độ đếm tùy thuộc vào giá trị trong thanh ghi điều khiển.
- 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.
- 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ý.
- 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ệ.
- S 2 , 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 S2 S1 S0 Tạo tín hiệu 0 0 0 INTA 0 0 1 IORC 0 1 0 IOWC , AIOWC 0 1 1 Không 1 0 0 MRDC 1 0 1 MRDC 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.
- 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.
- Phạm Hùng Kim Khánh Trang 19 Tài liệu Lập trình hệ thống Chương 1 INTA INT Data bus buffer Control logic RD ISR PR IRR IR0 Read / WR (Interrupt (Priority (Interrupt Write IR1 Service Resolver) Request A0 Logic Register) Register) IR7 INTERNAL BUS CS CAS0 Cascade CAS1 buffer / IMR (Interrupt Mask Register) CAS2 comparator 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.
- 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.
- Các tín hiệu này được đồng bộ với xung clock đưa vào DMAC (tần số xung clock tối đa là 5 MHz.
- Phạm Hùng Kim Khánh Trang 22 Tài liệu Lập trình hệ thống Chương 1 ™ Các thanh ghi: DMAC 8237A có tất cả 12 loại thanh ghi nội khác nhau: Tên Kích thước (bit) Số lượng Thanh ghi địa chỉ cơ sở (Base Address Register) 16 4 Thanh ghi đếm từ cơ sở (Base Word Count Register) 16 4 Thanh ghi địa chỉ hiện hành (Current Address Register) 16 4 Thanh ghi đếm từ hiện hành (Current Word Count Register) 16 4 Thanh ghi địa chỉ tạm (Temporary Address Register) 16 1 Thanh ghi đếm từ tạm (Temporary Word Count Register) 16 1 Thanh ghi trạng thái (Status Register) 8 1 Thanh ghi lệnh (Command Register) 8 1 Thanh ghi tạm (Temporary Register) 8 1 Thanh ghi chế độ (Mode Register) 6 4 Thanh ghi mặt nạ (Mask Register) 4 1 Thanh ghi yêu cầu (Request Register) 4 1 ™ Chức năng các chân của 8237A: CLK (Input): tín hiệu xung clock của mạch.
- Tín hiệu này thường được lấy từ 8284 sau khi qua cổng đảo.
- Khi Reset thì thanh ghi mặt nạ được lập còn các phần sau bị xóa.
- Thanh ghi lệnh + Thanh ghi trạng thái + Thanh ghi yêu cầu + Thanh ghi tạm + Flip-flop đầu/cuối (First/Last flip-flop) READY (Input): nối với READY của CPU để tạo chu kỳ đợi khi truy xuất các thiết bị ngoại vi hay bộ nhớ chậm.
- HLDA (Hold Acknowledge)(Input): tín hiệu chấp nhận yêu cầu treo từ CPU DRQ0 – DRQ3 (DMA Request)(Input): các tín hiệu yêu cầu treo từ thiết bị ngoại vi.
- A0 – A3 (Input, Output): chọn các thanh ghi trong 8237A khi lập trình hay dùng để chứa 4 bit địa chỉ thấp.
- A4 – A7 (Output): chứa 4 bit địa chỉ HRQ (Hold Request)(Output): tín hiệu yêu cầu treo đến CPU DACK0 – DACK3 (DMA Acknowledge)(Output): tín hiệu trả lời yêu cầu DMA cho các kênh.
- Các thanh ghi nội: Các thanh ghi nội trong DMAC 8237A được truy xuất nhờ các bit địa chỉ thấp A0 – A3.
- Để có thể sử dụng mạch DMAC 8237A, ta cần tạo tín hiệu điều khiển như sau: Phạm Hùng Kim Khánh Trang 25 Tài liệu Lập trình hệ thống Chương 1 Vcc 2 3 1A 1Y 4 IOR 5 1B 7 6 2A 2B 2Y IOW RD 11 9 10 3A 3B 3Y MEMR 14 12 WR 13 4A 4Y MEMW 4B AEN 15 G 1 A/B IO/ M 74LS257 Hình 1.19 – Tín hiệu điều khiển cho hệ thống làm việc với DMAC 8237A Tín hiệu AEN từ 8237A dùng để cấm các tín hiệu điều khiển từ CPU khi DMAC đã nắm quyền điều khiển bus.
- DE (Display Enable): cho phép (=1) hay không (=0) các tín hiệu điều khiển và địa chỉ vùng hiện lên màn hình.
- LPSTD (Light Pen Strobe): lưu trữ địa chỉ hiện hành của RAM màn hình trong thanh ghi bút sáng.
- CPU đọc thanh ghi và xác định vị trí bút sáng trên màn hình.
- D0 ÷ D7: đường dữ liệu.
- E: xung âm kích hoạt bus dữ liệu và dùng như xung clock cho 6845 đọc / ghi dữ liệu vào các thanh ghi bên trong.
- R/ W : đọc / ghi dữ liệu vào các thanh ghi.
- Khác với 8086, thay vì dùng các thanh ghi rời rạc là một ngăn xếp thanh ghi.
- CU bao gồm bộ điều khiển bus, bộ đệm dữ liệu và hàng lệnh.
- CU - Control Unit NU - Numerical Unit Từ điều khiển Bộ điều Module lũy Module khiển số thừa định trị Từ trạng thái Bus dữ liệu Đệm dữ liệu Từ thẻ Thanh ghi Địa chỉ trạng thái Điều khiển bus ngăn xếp Hình 1.21 – Sơ đồ khối của AD0 AD8 7 15 AD0 AD8 7 14 AD1 AD9 6 14 AD1 AD9 6 13 AD2 AD10 5 13 AD2 AD10 5 12 AD3 AD11 4 12 AD3 AD11 4 11 AD4 AD12 3 11 AD4 AD12 3 10 AD5 AD13 2 10 AD5 AD13 2 9 AD6 AD14 39 9 AD6 AD14 39 CLK (8284) AD7 AD15 AD7 AD CLK A16/S3 INT (8259) CLK A16/S3 37 37 23 A17/S4 36 18 A17/S4 36 25 BUSY A18/S5 35 33 INTR A18/S5 35 24 QS0 A19/S6 17 MX A19/S6 22 QS1 26 22 NMI 26 31 READY S0 27 31 READY S0 27 33 RQ/GT0 S1 28 30 RQ/GT0 S1 28 RQ/GT1 S2 IRx (8259) RQ/GT1 S2 21 21 RST 32 23 RST 34 34 INT TEST BHE/S7 29 BHE/S7 LOCK 25 QS0 24 8087 QS1 32 RD 8086 Hình 1.22 – Sơ đồ kết nối 8087 và CPU 8086 Phạm Hùng Kim Khánh Trang 28 Tài liệu Lập trình hệ thống Chương 1 Ngăn xếp thanh ghi có tất cả 8 thanh ghi từ R0 ÷ R7, mỗi thanh ghi dài 80 bit trong đó bit 79 là bit dấu, bit 64 ÷ 78 dùng cho số mũ và phần còn lại là phần định trị.
- Dữ liệu truyền giữa các thanh ghi này được thực hiện rất nhanh do 8087 có độ rộng bus dữ liệu là 84 bit và không cần phải biến đổi định dạng.
- 8087 có một thanh ghi trạng thái là thanh ghi từ thẻ (tag word) gồm các cặp bit Tag0 ÷ Tag7 để lưu trữ các thông tin liên quan đến nội dung của các thanh ghi R0 ÷ R7 để cho phép thực hiện một số tác vụ nhanh hơn.
- Mỗi thanh ghi từ thẻ có 2 bit xác định 4 giá trị khác nhau của các thanh ghi Ri.
- Bộ thanh ghi μP 8086/8088 có tất cả 14 thanh ghi nội.
- Các thanh ghi này có thể phân loại như sau.
- Thanh ghi dữ liệu (data register.
- Thanh ghi chỉ số và con trỏ (index & pointer register.
- Thanh ghi đoạn (segment register.
- Thanh ghi trạng thái và điều khiển (status & control register) 5.1.
- Các thanh ghi dữ liệu Các thanh ghi dữ liệu gồm có các thanh ghi 16 bit AX, BX, CX và DX trong đó nửa cao và nửa thấp của mỗi thanh ghi có thể định địa chỉ một cách độc lập.
- Các nửa thanh ghi này (8 bit) có tên là AH và AL, BH và BL, CH và CL, DH và DL.
- Các thanh ghi này được sử dụng trong các phép toán số học và logic hay trong quá trình chuyển dữ liệu.
- Bảng 2.8: Thanh ghi Sử dụng trong AX MUL, IMUL (toán hạng nguồn kích thước word) DIV, IDIV (toán hạng nguồn kích thước word) IN (nhập word) OUT (xuất word) CWD Các phép toán xử lý chuỗi (string) AL MUL, IMUL (toán hạng nguồn kích thước byte) DIV, IDIV (toán hạng nguồn kích thước byte) IN (nhập byte) OUT (xuất byte) XLAT AAA, AAD, AAM, AAS (các phép toán ASCII) CBW (đổi sang word) Phạm Hùng Kim Khánh Trang 30 Tài liệu Lập trình hệ thống Chương 1 DAA, DAS (số thập phân) Các phép toán xử lý chuỗi (string) AH MUL, IMUL (toán hạng nguồn kích thước byte) DIV, IDIV (toán hạng nguồn kích thước byte) CBW (đổi sang word) BX XLAT CX LOOP, LOOPE, LOOPNE Các phép toán string với tiếp dầu ngữ REP CL RCR, RCL, ROR, ROL (quay với số đếm byte) SHR, SAR, SAL (dịch với số đếm byte) DX MUL, IMUL (toán hạng nguồn kích thước word) DIV, IDIV (toán hạng nguồn kích thước word) AX (ACC – Accumulator): thanh ghi tích luỹ BX (Base): thanh ghi cơ sở CX (Count): đếm DX (Data): thanh ghi dữ liệu 5.2.
- Các thanh ghi chỉ số và con trỏ Bao gồm các thanh ghi 16 bit SP, BP, SI và DI, thường chứa các giá trị offset (độ lệch) cho các phần tử định địa chỉ trong một phân đoạn (segment).
- Hai thanh ghi con trỏ (SP – Stack Pointer và BP – Base Pointer) cho phép truy xuất dễ dàng đến các phần tử đang ở trong ngăn xếp (stack) hiện hành.
- Các thanh ghi chỉ số (SI – Source Index và DI – Destination Index) được dùng để truy xuất các phần tử trong các đoạn dữ liệu và doạn thêm (extra segment).
- Thông thường, các thanh ghi con trỏ liên hệ đến đoạn stack hiện hành và các thanh ghi chỉ số liên hệ đến doạn dữ liệu hiện hành.
- Các thanh ghi đoạn Bao gồm các thanh ghi 16 bit CS (Code segment), DS (Data segment), SS (stack segment) và ES (extra segment), dùng để định địa chỉ vùng nhớ 1 MB bằng cách chia thành 16 đoạn 64 KB.
- Tất cả các lệnh phải ở trong đoạn mã hiện hành, được định địa chỉ thông qua thanh ghi CS.
- Offset (độ lệch) của mã được xác định bằng thanh ghi IP.
- Dữ liệu chương trình thường được đặt ở đoạn dữ liệu, định vị thông qua thanh ghi DS.
- Stack định vị thông qua thanh ghi SS.
- Thanh ghi đoạn thêm có thể sử dụng để định địa chỉ các toán hạng, dữ liệu, bộ nhớ và các phần tử khác ngoài đoạn dữ liệu và stack hiện hành.
- Các thanh ghi điều khiển và trạng thái Thanh ghi con trỏ lệnh IP (Instruction Pointer) giống như bộ đếm chương trình (Program Counter).
- Thanh ghi điều khiển này do BIU quản lý nhằm lưu trữ offset từ bắt đầu đoạn mã đến lệnh thực thi kế tiếp.
- Ta không thể xử lý trực tiếp trên thanh ghi IP.
- Phạm Hùng Kim Khánh Trang 31 Tài liệu Lập trình hệ thống Chương 1 Thanh ghi cờ (Flag register) hay từ trạng thái 16 bit chứa 3 bit điều khiển (TF, IF và DF) và 6 bit trạng thái (OF, SF, ZF, AF, PF và CF) còn các bit còn lại mà 8086/8088 không sử dụng thì không thể truy xuất được