Ngắt và xử lý ngắt

29

Transcript of Ngắt và xử lý ngắt

Page 1: Ngắt và xử lý ngắt

Tài liệu môn học Chuyên đề công nghệ mới

Giản Quốc Anh – Bộ môn Kỹ thuật Điện tử Page 1

Ngắt [1] [2]

Phần này mô tả các ngắt CPU, bao gồm reset và các ngắt không che được (NMI).

Các thanh ghi điều khiển CPU và chức năng của nó trong điều khiển ngắt được mô tả.

Quá trình xử lý ngắt, phương pháp mà CPU sử dụng để tự động phát hiện sự xuất hiện

của các ngắt và chuyển việc thực hiện của chương trình tới chương trình phục vụ ngắt

được trình bày. Phần cuối mô tả quá trình thực thi của các ngắt.

Thông thường, các DSP làm việc trong môi trường có chứa nhiều các sự kiện

ngoài bất đồng bộ. Các sự kiện này đòi hỏi chip DSP phục vụ khi chúng xảy ra. Một ngắt

là một sự kiện thực hiện dừng quá trình hiện tại trong CPU để CPU có thể giải quyết

nhiệm vụ cần thiết tương ứng với sự kiện. Các nguồn ngắt này có thể là on chip hoặc off

chip như các bộ timers, bộ chuyển đổi ADC hoặc các thiết bị ngoại vi khác.

Một ngắt thực hiện cất giữ trạng thái hiện tại, hoàn thành nhiệm vụ của chương

trình phục vụ ngắt, lấy lại nội dung các thanh ghi và bối cảnh của quá trình tại thời điểm

bị ngắt và tiếp tục công việc tại vị trí bị gián đoạn.

Có tám thanh ghi điều khiển dịch vụ ngắt. Một sự chuyển đổi tương đối của một

chân ngắt đặt trạng thái chờ ngắt bên trong thanh ghi cờ ngắt (IFR). Nếu ngắt tương ứng

được cho phép, CPU bắt đầu quá trình phục vụ ngắt và chuyển hướng chương trình tới

chương trình phục vụ ngắt tương ứng.

Các loại ngắt và tín hiệu được sử dụng

Có ba loại ngắt trong CPU TMS320C6000 bao gồm:

- Reset

- Ngắt không che được NMI

- Ngắt che được

Ba loại ngắt này khác nhau bởi mức độ ưu tiên của chúng. Ngắt reset có mức ưu tiên cao

nhất và tương ứng với tín hiệu RESET. Ngắt không che được có mức độ ưu tiên cao thứ

hai và tương ứng với các tín hiệu NMI. Các ngắt có mức ưu tiên thấp nhất là các ngắt 4-

15 tương ứng với các tín hiệu ngắt INT4-INT15. RESET, NMI và một số tín hiệu INT4-

INT15 được ánh xạ đến các chân trên C6000. Một số ngắt INT4-INT15 được sử dụng bởi

các ngoại vi bên trong và một số có thể điều khiển bằng phần mềm.

Page 2: Ngắt và xử lý ngắt

Tài liệu môn học Chuyên đề công nghệ mới

Giản Quốc Anh – Bộ môn Kỹ thuật Điện tử Page 2

Bảng 1 Thứ tự ưu tiên ngắt

Ngắt Reset

Reset là ngắt có mức ưu tiên cao nhất và được sử dụng để đặt CPU về trạng thái đã biết.

Ngắt reset là duy nhất.

- Chân /reset có tín hiệu tích cực mức thấp. Tất cả các ngắt khác có tín hiệu tích

cực mức cao

- /Reset phải giữ ở trạng thái thấp trong 10 chu kỳ xung nhịp trước khi lên mức

cao để đặt CPU về trạng thái xác định

- Lệnh đang thực hiện bị bỏ qua và tất cả các thanh ghi trả lại giá trị mặc định

- Gói lệnh FP phục vụ ngắt reset phải đặt ở vị trí có địa chỉ 0

- /Reset không chịu ảnh hưởng bởi các lệnh rẽ nhánh

Các ngắt không che được

NMI là ngắt có mức ưu tiên cao thứ hai sau reset và thường được sử dụng để cảnh

báo CPU những vấn đề nghiêm trọng của phần cứng như lỗi về nguồn.

Để ngắt NMI xảy ra, bit cho phép ngắt không che được trong thanh ghi cho phép

ngắt phải được đặt bằng 1. Nếu NMIE được đặt bằng 1, chỉ có điều kiện duy nhất có thể

ngăn cản NMI là khi NMI xảy ra trong khe thời gian của một lệnh rẽ nhánh.

Page 3: Ngắt và xử lý ngắt

Tài liệu môn học Chuyên đề công nghệ mới

Giản Quốc Anh – Bộ môn Kỹ thuật Điện tử Page 3

NMIE được xóa về 0 khi reset để tránh ngăn cản ngắt reset. NMIE được xóa tại

thời điểm xảy ra một ngắt NMI để ngăn một ngắt NMI khác xảy ra trong quá trình một

ngắt NMI đang thực hiện. Không thể xóa NMIE bằng phần mềm, nhưng có thể đặt

NMIE. Trong khi NMIE bị xóa, các ngắt che được INT4-INT15 bị cấm.

Các ngắt che được (INT4-INT15)

Các CPU của các DSP C6000 có 12 ngắt có thể che được. Các ngắt này có mức ưu

tiên thấp hơn so với các ngắt NMI và reset. Các ngắt này có thể được gán cho các thiết bị

ngoài, ngoại vi on-chip, điều khiển phần mềm hoặc không sử dụng.

Giả thiết rằng một ngắt che được không xảy ra trong khe trễ (delay slots) của một

lệnh rẽ nhánh, các điều kiện sau phải thỏa mãn để xử lý một ngắt che được:

- Bit cho phép ngắt chung GIE trong thanh ghi trạng thái điều khiển CSR được

đặt bằng 1

- Bit NMIE trong thanh ghi cho phép ngắt IER đặt bằng 1

- Bit cho phép ngắt tương ứng trong thanh ghi IER đặt bằng 1

- Ngắt tương ứng xảy ra đặt bit tương ứng trong thanh ghi cờ ngắt IFR lên 1 và

không có cờ ngắt có mức ưu tiên cao hơn bằng 1 trong thanh ghi IFR

Bảng phục vụ ngắt

Khi CPU bắt đầu xử lý một ngắt, nó tham chiếu tới bảng phục vụ ngắt IST

(Interrupt Service Table). IST là một bảng của các gói lệnh chứa mã phục vụ các ngắt.

IST bao gồm 16 gói FP liên tục. Mỗi gói ISFP (Interrupt Service Fetch Packet) chứa tám

lệnh. Một chương trình phục vụ ngắt đơn giản có thể đặt vừa bên trong một ISFP độc lập.

Địa chỉ và nội dung của IST được chỉ ra trong hình sau. Bởi vì mỗi FP chứa tám

lệnh 32 bit, mỗi địa chỉ trong bảng được tăng 32 byte (20h) từ địa chỉ liền kề.

Page 4: Ngắt và xử lý ngắt

Tài liệu môn học Chuyên đề công nghệ mới

Giản Quốc Anh – Bộ môn Kỹ thuật Điện tử Page 4

Bảng 2 Bảng địa chỉ các ngắt

Page 5: Ngắt và xử lý ngắt

Tài liệu môn học Chuyên đề công nghệ mới

Giản Quốc Anh – Bộ môn Kỹ thuật Điện tử Page 5

Bảng vector ngắt được sử dụng khi một ngắt bắt đầu. Mỗi vị trí có độ dài 32 byte

tương ứng với một gói lệnh FP. Địa chỉ bên phía phải bảng tương ứng với địa chỉ offset

của một ngắt cụ thể. Ví dụ, FP của ngắt INT11 có địa chỉ là địa chỉ cơ bản cộng với địa

chỉ offset 160h. Do mỗi FP chứa tám lệnh 32 bit, mỗi địa chỉ offset trong bảng tăng 20h.

Gói lệnh Reset phải ở địa chỉ không. Tuy nhiên, các FP tương ứng với các ngắt

khác có thể đặt lại địa chỉ. Địa chỉ đặt lại có thể được xác định bằng cách viết địa chỉ này

vào trường địa chỉ cơ sở bảng phục vụ ngắt ISTB (Interrupt Service Table Base) của

thanh ghi ISTP. Khi reset, ISTB bằng không. Để đặt lại bảng vector, trường ISTB được

sử dụng để ghi địa chỉ cơ sở mới, địa chỉ đặt lại là ISTB cộng với offset.

Thanh ghi Con trỏ bảng phục vụ ngắt ISTP (Interrupt Service Table Pointer)

Gói reset FP phải được đặt tại địa chỉ 0, nhưng phần còn lại của IST có thể được

đặt ở vị trí bất kỳ trong bộ nhớ chương trình. Vị trí của IST được xác định bởi trường

ISTB (Interrupt Service Table Base) trong thanh ghi con trỏ bảng phục vụ ngắt ISTP.

Trường HPEINT xác định ngắt cụ thể và vị trí của gói FP cụ thể bên trong IST.

Trường ISTB được xóa về không khi reset, do đó tài thời điểm khởi đầu IST phải

nằm tại địa chỉ 0. Sau khi reset, ta có thể định vị lại IST bằng cách viết một giá trị mới

vào ISTB. Nếu được định vị lại, ISFP đầu tiên (tương ứng với /RESET) sẽ không bao giờ

thực hiện qua xử lý ngắt, bởi vì reset xóa ISTB về 0.

Trường HPEINT (Highest Priority Enable Interrupt) chỉ ra số của ngắt (quan hệ

với vị trí bit trong thanh ghi cờ ngắt IFR) có mức ưu tiên cao nhất được phép bởi bit

tương ứng trong thanh ghi cho phép ngắt IER. Do đó, ISTP có thể được sử dụng để rẽ

nhánh tới ngắt được phép có mức ưu tiên cao nhất. Nếu không có ngắt nào đang chờ và

được phép, HPEINT chứa giá trị 0. Ngắt tương ứng không cần được phép bởi NMIE (trừ

khi nó là NMI) hoặc bởi GIE.

Page 6: Ngắt và xử lý ngắt

Tài liệu môn học Chuyên đề công nghệ mới

Giản Quốc Anh – Bộ môn Kỹ thuật Điện tử Page 6

Hình trên chỉ ra một ví dụ đặt lại IST tới địa chỉ 800H.

Bước 1: Sao chép IST, nằm giữa 0h và 200h tới vị trí nhớ giữa 800h và A00h.

Bước 2: Viết giá trị 800h vào ISTP

MVK 800h,A2

MVC A2, ISTP

ISTP=800h=1000 0000 0000b

Làm thế nào ISTP chỉ dẫn CPU tới ISFP tương ứng trong IST đã được định vị lại?

Giả thiết: IFR=BBC0=1011 1011 1100 0000b

IER=1230h=0001 0010 0011 0001b

Page 7: Ngắt và xử lý ngắt

Tài liệu môn học Chuyên đề công nghệ mới

Giản Quốc Anh – Bộ môn Kỹ thuật Điện tử Page 7

Tức là có 2 ngắt được phép đang chờ: Ngắt INT9 và INT12

Bit 1 thứ nhất trong thanh ghi cờ ngắt IFR chỉ ra rằng các ngắt đang chờ; bit 1 thứ

nhất trong thanh ghi cho phép ngắt IER chỉ ra rằng các ngắt là được phép. INT9 có mức

ưu tiên cao hơn INT12, do đó HPEINT được mã hóa vmowis giá trị của INT9: 01001b.

HPEINT tương ứng với các bit 9-5 của thanh ghi ISTP.

INSTP=1001 0010 0000b =920h = địa chỉ của INT9

Interrupt Service Fetch Packet (ISFP)

Một ISFP là một FP được sử dụng phục vụ một ngắt. Hình sau chỉ ra một ISFP

chứa một chương trình phục vụ ngắt nhỏ đủ để đặt vừa bên trong một FP. Để trở về

chương trình chính, FP chứa một lệnh rẽ nhánh tới lệnh con trỏ trở về ngắt (B IRP). Theo

sau bởi một lệnh NOP 5 cho phép địa chỉ đích được thực hiện trong pipeline.

Page 8: Ngắt và xử lý ngắt

Tài liệu môn học Chuyên đề công nghệ mới

Giản Quốc Anh – Bộ môn Kỹ thuật Điện tử Page 8

Nếu chương trình phục vụ ngắt quá lớn không chứa đủ được trong một FP, một

lệnh rẽ nhánh tới vị trí chứa mã chương trình phục vụ ngắt là cần thiết. Hình sau chỉ ra

một chương trình phục vụ ngắt cho ngắt INT4, một lệnh rẽ nhánh tới vị trí nhớ 1234h

được sử dụng để hoàn thành chương trình phục vụ ngắt.

Các thanh ghi điều khiển ngắt:

- CSR (Control Status Register): chứa bit cho phép ngắt (GIE) và các bit điều

khiển/trạng thái khác

Thanh ghi CSR chứa các bit điều khiển và trạng thái.

Page 9: Ngắt và xử lý ngắt

Tài liệu môn học Chuyên đề công nghệ mới

Giản Quốc Anh – Bộ môn Kỹ thuật Điện tử Page 9

- IER (Interrupt Enable Register): cho phép/cấm các ngắt độc lập

Page 10: Ngắt và xử lý ngắt

Tài liệu môn học Chuyên đề công nghệ mới

Giản Quốc Anh – Bộ môn Kỹ thuật Điện tử Page 10

- IFR (Interrupt Flag Register): hiển thị trạng thái của các ngắt

- ISR (Interrupt Set Register): đặt các ngắt đợi

- ICR (Interrupt Clear Register): xóa các ngắt đang đợi

- ISTP (Interrupt Service Table Pointer): con trỏ tới bảng chương trình phục vụ

ngắt

- IRP (Interrupt Return Pointer): chứa địa chỉ quay trở về được sử dụng để trở về

từ ngắt che được. Địa chỉ này được thiết lập qua lệnh B IRP

Page 11: Ngắt và xử lý ngắt

Tài liệu môn học Chuyên đề công nghệ mới

Giản Quốc Anh – Bộ môn Kỹ thuật Điện tử Page 11

- NRP (Nonmaskable Interrupt Return Pointer): Chứa địa chỉ quay trở về được

sử dụng để trở về từ ngắt không che được. Sự trở về này được thiết lập qua

lệnh B NRP.

Cho phép và cấm ngắt chung

Thanh ghi điều khiển trạng thái CSR có chứa hai trường cho phép điều khiển các

ngắt: GIE và PGIE. Cho phép ngắt GIE cho phép hoặc cấm tất cả các ngắt che được:

- GIE=1 cho phép các ngắt che được được xử lý

- GIE=0 cấm các ngắt không che được sao cho chúng không được xử lý

Bit 1 của CSR là bit PGIE và giữ giá trị trước đó của GIE khi ngắt che được được xử lý.

Trong quá trình xử lý ngắt che được, giá trị của bit GIE được sao chép vào bit PGIE, và

bit GIE được xóa. Giá trị trước đó của PGIE bị mất. Bit GIE được xóa trong khi thực hiện

một ngắt che được để ngăn chặn ngắt che được khác xảy ra trước khi trạng thái của thiết

bị được lưu lại. Khi trở về từ chương trình phục vụ ngắt, bằng lệnh B IRP, nội dung của

PGIE được sao chép ngược lại bit GIE. Bit PGIE không thay đổi giá trị.

Mục đích của bit PGIE là ghi lại giá trị của bit GIE tại thời điểm quá trình xử lý

ngắt bắt đầu. Điều này là cần thiết bởi vì các ngắt được phát hiện song song với việc thực

hiện lệnh. Thông thường, bit GIE bằng 1 khi một ngắt xảy ra. Tuy nhiên, nếu một ngắt

được phát hiện song song với một lệnh MVC thực hiện xóa bit GIE, bit GIE có thể bị xóa

bởi lệnh MVC trước khi quá trình xử lý ngắt bắt đầu. Bởi vì bit PGIE ghi lại trạng thái

của bit GIE sau khi tất cả các lệnh đã được thực hiện hoàn tất trước khi chương trình

phục vụ ngắt bắt đầu, bit PGIE ghi lại thực tế rằng bit GIE được xóa khi ngắt xảy ra.

Điều khiển ngắt độc lập

Việc phục vụ các ngắt hiệu quả đòi hỏi điều khiển độc lập tất cả ba loại ngắt: reset,

ngắt không che được và ngắt che được. Cho phép và cấm các ngắt độc lập được thực hiện

qua thanh ghi cho phép ngắt IER. Trạng thái chờ của các ngắt được lưu trong thanh ghi

cờ ngắt IFR. Xử lý các ngắt thủ công có thể được thiết lập thông qua việc sử dụng thanh

ghi đặt ngắt ISR và thanh ghi xóa ngắt ICR. Các con trỏ trở về từ ngắt lấy lại trạng thái

sau khi phục vụ các ngắt che được và không che được.

Cho phép và cấm các ngắt

Ta có thể cho phép và cấm các ngắt độc lập bằng cách đặt và xóa các bit trong

thanh ghi IER tương ứng với các ngắt độc lập. Một ngắt có thể được xử lý chỉ khi bit cho

phép ngắt tương ứng trong thanh ghi IER được đặt. Bit 0, tương ứng với reset, không ghi

Page 12: Ngắt và xử lý ngắt

Tài liệu môn học Chuyên đề công nghệ mới

Giản Quốc Anh – Bộ môn Kỹ thuật Điện tử Page 12

được và thường được đọc là 1, do đó ngắt reset là luôn được phép. Ta không thể cấm ngắt

reset. Các bit IE4-IE15 có thể viết bằng 1 hoặc 0, cho phép hoặc cấm ngắt tương ứng.

Khi NMIE=0, tất cả các ngắt (trừ ngắt reset) bị cấm. Bit NMIE được xóa khi reset

để ngăn chặn bất kỳ quá trình xử lý ngắt nào cho đến khi ta cho phép NMI. Sau khi reset,

ta phải đặt bit NMIE để cho phép NMI và cho phép INT4-INT15 được phép bằng cách

đặt bit GIE trong thanh ghi CSR và bit tương ứng trong IER. Không thể xóa thủ công bit

NMIE; bit NMIE không ảnh hưởng khi viết giá trị 0 vào nó. Bit NMIE được xóa khi xảy

ra một NMI. Nếu bị xóa, bit NMIE chỉ được đặt khi hoàn tất lệnh B NRP hoặc bằng cách

viết giá trị 1 vào nó.

Trạng thái của các ngắt

Thanh ghi cờ ngắt IFR chứa trạng thái của INT4-INT15 và NMI. Mỗi bit tương

ứng của ngắt trong IFR được đặt bằng 1 khi ngắt xảy ra; trái lại, các bit tương ứng có giá

trị 0. Nếu ta muốn kiểm tra trạng thái của các ngắt, sử dụng lệnh MVC để đọc IFR.

Đặt và xóa các ngắt

Thanh ghi đặt ngắt ISR và thanh ghi xóa ngắt ICR cho phép ta đặt hoặc xóa các

ngắt che được thủ công trong thanh ghi cờ ngắt IFR. Viết giá trị 1 tới IS4-IS15 trong

thanh ghi ISR sẽ làm cờ ngắt tương ứng trong thanh ghi cờ ngắt được đặt bằng 1. Tương

tự, việc ghi giá trị 1 vào một bit trong thanh ghi ICR sẽ làm cho cờ ngắt tương ứng trong

thanh ghi IFR được xóa. Việc viết giá trị 0 tới bit bất kỳ của thanh ghi ISR hoặc ICR

không có ảnh hưởng gì. Ta không thể đặt hoặc xóa bit bất kỳ trong ISR hoặc ICR để ảnh

hưởng đến NMI hoặc reset.

Trở về từ chương trình phục vụ ngắt

Sau khi /RESET lên mức cao, các thanh ghi điều khiển được đặt vào trạng thái đã

biết và chương trình bắt đầu thực hiện tại địa chỉ 0. Sau khi các chương trình phục vụ

ngắt che được và không che được thực hiện, lệnh rẽ nhánh sử dụng thanh ghi con trỏ trở

về tương ứng sẽ đưa chương trình trở về vị trí thực hiện trước khi bị ngắt.

Trở về từ các ngắt không che được

Thanh ghi con trỏ trở về từ ngắt không che được NRP chứa con trỏ trở về thực

hiện hướng CPU tới vị trí thích hợp để tiếp tục thực hiện chương trình sau khi xử lý ngắt

NMI. Lệnh B NRP trong chương trình phục vụ ngắt sẽ điều khiển trở về vị trí bị gián

đoạn khi thực hiện chương trình phục vụ ngắt.

Trở về từ các ngắt che được

Page 13: Ngắt và xử lý ngắt

Tài liệu môn học Chuyên đề công nghệ mới

Giản Quốc Anh – Bộ môn Kỹ thuật Điện tử Page 13

Thanh ghi con trỏ trở về từ ngắt IRP chứa con trỏ trở về hướng dẫn CPU tới vị trí

thích hợp để tiếp tục thực hiện chương trình sau khi xử lý xong ngắt che được. Lệnh B

IRP trong chương trình phục vụ ngắt thực hiện điều này.

Phát hiện và xử lý ngắt

Khi một ngắt xảy ra, nó đặt cờ ngắt tương ứng trong thanh ghi cờ IFR. Phụ thuộc

vào điều kiện cụ thể, ngắt có thể được phục vụ hay không phục vụ.

Ngắt trong ngắt

Nói chung, khi một CPU đang xử lý một chương trình phục vụ ngắt, các ngắt khác

bị cấm. Tuy nhiên, khi một chương trình phục vụ ngắt là để xử lý các ngắt che được

INT4-INT15, một ngắt NMI có thể ngắt một quá trình phục vụ ngắt che được. Nói cách

khác, một ngắt không che được (NMI) có thể ngắt một ngắt che được nhưng một ngắt

NMI hoặc ngắt che được không thể ngắt một ngắt NMI khác. Có những thời điểm ta

muốn cho phép một ngắt bị ngắt bởi một ngắt khác. Mặc dù vi xử lý mặc định không cho

phép một chương trình phục vụ ngắt bị ngắt bởi một một ngắt (trừ trường hợp nguồn ngắt

là NMI), ta có thể cho phép điều này bằng phần mềm. Để cho phép ngắt trong ngắt,

chương trình phục vụ ngắt phải thực hiện thêm các bước khởi đầu sau để công việc thông

thường của nó lưu bất kỳ các thanh ghi nào (kể cả các thanh ghi điều khiển) mà nó chỉnh

sửa:

- Các nội dung của IRP (hoặc NRP) phải được lưu lại

- Nội dung của bit PGEI phải được lưu lại

- Bit GIE phải được đặt bằng 1

Trước khi trở lại từ chương trình phục vụ ngắt, chương trình phải lấy lại nội dung của các

thanh ghi đã được lưu theo trật tự sau:

- Bit GIE phải được xóa về 0

- Bit PGIE phải được lấy lại giá trị đã lưu

- IRP (hoặc NRP) phải được lấy lại giá trị đã lưu

Mặc dù các bước 2, 3 phải được thực hiện theo trật tự, quan trọng là bit GIE phải được

xóa trước tiên. Điều này có nghĩa là các bit GIE và PGIE phải được lấy lại với các lệnh

viết riêng rẽ tới CSR. Nếu các bit này không được lấy lại riêng rẽ, có thể bit PGIE bị ghi

đè như các ngắt đang được cấm.

Page 14: Ngắt và xử lý ngắt

Tài liệu môn học Chuyên đề công nghệ mới

Giản Quốc Anh – Bộ môn Kỹ thuật Điện tử Page 14

Bibliography

[1] Texas Instrument. (2006) TMS320C6000 CPU and Instruction Set Reference Guide.

[2] Rulph Chassaing, Digital Signal Processing and Applications with the C6713 and C6416 DSK.: Wiley-

Interscience, 2005.