Các cờ của CPSR nhƣ sau:
N: Negative- cờ này đƣợc bật khi bit cao nhất của kết quả xử lý ALU bằng 1. Z: Zero- cờ này đƣợc bật khi kết quả cuối cùng trong ALU bằng 0.
C: Carry- cờ này đƣợc bật khi kết quả cuối cùng trong ALU lớn hơn giá trị 32bit và tràn.
V: Overflow-cờ báo tràn sang bit dấu. Các bit điều khiển:
Các bit ngắt: o I = 1: Cấm ngắt thƣờng IRQ o F = 1: Cấm ngắt nhanh FIQ Bit trạng thái T: o T = 1: VXL hoạt động ở chế độ Thumb o T = 0: VXL hoạt động ở chế độ ARM Các bit chế độ:
M[4:0] Chế độ Các thanh ghi đƣợc phép truy nhập 10000 User PC, R0 – R14, CPSR
10001 FIQ PC, R0 – R7, R8_fiq – R14_fiq, CPSR, SPSR_fiq 10010 IRQ PC, R0 – R12, R13_irq, R14_irq, CPSR, SPSR_irq 10011 SVC PC, R0 – R12, R13_svc, R14_svc, CPSR, SPSR_svc 10111 Abort PC, R0 – R12, R13_abt, R14_abt, CPSR, SPSR_abt 11011 Undef PC, R0 – R12, R13_und, R14_und, CPSR, SPSR_und 11111 System PC, R0 – R14, CPSR
Bảng 2. 1 Các chếđộ hoạt động của ARM
2.5. Các chếđộ hoạt động
Chế độ hoạt động của bộ vi xử lý sẽ xác định thanh ghi nào hoạt động và quyền truy cập tới thanh ghi CPSR. Mỗi chế độ hoạt động của bộ vi xử lý sẽ là chế độ đặc quyền (Priviliged) và không đặc quyền (Unpriviliged): Chế độ đặc quyền cho phép đọc và ghi tới thanh ghi CPRS. Ngƣợc lại chế độ không đặc quyền chỉ cho phép đọc trƣờng điều khiển của CPRS nhƣng vẫn cho phép đọc và ghi tới các cờ điều kiện.
Có bảy chế độ hoạt động của bộ VXL: sáu chế độ đặc quyền (abort, fast interrupt, request, interrupt request, supervisor, system, and undefined) và một chế độ không đặc quyền (user). Đối
với từng chế độ sẽ có các thanh ghi riêng cho từng chế độ đó. Sơ đồ các thanh ghi các chế độ nhƣ mô tả trong hình 2.7.
Hoạt động của các chế độ nhƣ sau:
Bộ VXL hoạt động ở chế độ Abort khi bộ VXL không thể truy cập bộ nhớ.
Bộ VXL hoạt động ở chế độ interrupt request (IRQ) và fast interrupt request (FIQ) tƣơng ứng với hai mức ngắt của chip ARM.
Bộ VXL hoạt động ở chế độ Supervisor sau khi hệ thống khởi động (reset) hoặc khi có chƣơng trình ngắt mềm.
Bộ VXL hoạt động ở chế độ System khi hệ thống có thể truy cập và đọc, ghi toàn bộ thanh ghi CPRS.
Bộ VXL chuyển sang chế độ Undefined khi bộ VXL gặp một lệnh không xác định hoặc không đƣợc hỗ trợ.
Bộ VXL hoạt động ở chế độ User là để chạy các chƣơng trình và các ứng dụng thông thƣờng.
2.6. Hệ thống ngắt
2.6.1. Chếđộ ngoại lệ (Exception)
Khi đang thực thi chƣơng trình, ngoại lệ xảy ra khi hệ thống rơi vào các trƣờng hợp đặc biệt nhƣ khởi động lại hệ thống, các phép tính chia cho 0, các lệnh sai cú pháp, không truy cập đƣợc bộ nhớ, khi có ngắt ngoài hoặc ngắt của chƣơng trình. Mỗi tình huống ngoại lệ đều có một chƣơng trình đi kèm gọi là chương trình xử lý ngoại lệ (exception handler). Khi gặp tình huống ngoại lệ, vi xử lý ARM tự động chuyển đến một địa chỉ chứa đã định sẵn cho chƣơng trình xử lý ngoại lệ đó. Địa chỉ định sẵn đó gọi là địa chỉ vector ngoại lệ (Exception vector address) và nó nằm tại vị trí 32 byte cuối cùng của bộ nhớ ROM. Khoảng nhớ 32 byte này đƣợc gọi là bảng vector ngoại lệ (exception vector table). Bảng sau mô tả một số chế độ ngoại lệ của ARM:
Ngoại lệ Chếđộ hoạt động Địa chỉ vector
Reset (Khởi động lại hệ thống) Supervisor (Giám sát) 0x00000000 Undefined instruction (Lệnh bị sai) Undefined (Không xác định) 0x00000004 Software Interrupt (Ngắt mềm) Supervisor 0x00000008 Prefetch Abort (Không nạp đƣợc lệnh do
sai địa chỉ)
Abort 0x0000000C
Data Abort (Không nạp đƣợc dữ liệu so sai địa chỉ)
Abort 0x00000010
Interrupt (IRQ) (Ngắt) Interrupt (IRQ) 0x00000018 Fast Interrupt (FIQ) (Ngắt nhanh) Fast Interrupt (FIQ) 0x0000001C
32
Địa chỉ 0x00000014 chƣa đƣợc sử dụng. Mỗi ngoại lệ có 4 byte để lƣu 01 lệnh. Lệnh này thƣờng là lệnh để chuyển con trỏ lệnh đến địa chỉ của chƣơng trình xử lý ngoại lệ.
Trƣớc khi xử lý một ngoại lệ, trạng thái hiện tại của chƣơng trình chính phải đƣợc lƣu lại. Nói cách khác, nội dung của tất cả các thanh ghi (đặc biệt là thanh ghi PC và CPSR) sau khi xử lý ngoại lệ phải giống nhƣ trƣớc khi xử lý ngoại lệ. Việc lƣu giữ trạng thái này đảm bảo không làm mất đi tính ổn định của chƣơng trình chính.
Vi xử lý Arm sử dụng các thanh ghi trống cùng với các thanh ghi chuyên dùng của mỗi chế độ để lƣu giữ trạng thái. Để xử lý một ngoại lệ, vi xử lý Arm thực hiện các bƣớc sau:
1. Lƣu địa chỉ của lệnh ngay sau lệnh gọi ngoại lệ trong chƣơng trình chính vào thanh ghi LR.
2. Lƣu nội dung CPRS vào thanh ghi SPSR tƣơng ứng với mỗi chế độ. 3. Thiết lập 5 bit chế độ của CPRS tƣơng ứng với ngoại lệ.
4. Thiết lập trạng thái ARM bằng cách đặt bit thứ 5 (bit T) của CPSR bằng 0. 5. Cấm ngắt nhanh bằng cách đặt bit 6 (bit F) của CPSR bằng 1.
6. Cấm ngắt thƣờng bằng cách đặt bit 7 (bit I) của CPSR bằng 1.
7. Nạp địa chỉ của vector ngoại lệ vào thanh ghi bộ đếm chƣơng trình PC.
Sau khi thực hiện 7 bƣớc trên, bộ vi xử Arm bắt đầu thực hiện các lệnh tại địa chỉ vector ngoại lệ. Lƣu ý, trong suốt quá trình thực hiện lệnh của ngoại lệ, các thanh ghi dành riêng của chế độ đó sẽ thay thế các thanh ghi tƣơng ứng của chế độ User. Ví dụ, trong khi ở chế độ FIQ, các thanh ghi từ R8 đến R14 sẽ không đƣợc sử dụng và thay vào đó là các thanh ghi R8_fiq – R14_fiq.
Sau khi thực hiện xong chƣơng trình xử lý ngoại lệ, chƣơng trình xử lý ngoại lệ thực hiện: 1. Copy nội dung thanh ghi LR trở lại vào thanh ghi PC
R15 (PC) R14 (LR) R13 R12 R11 R10 R9 R8 R7 R6 R5 R4 R3 R2 R1 R0 R15 (PC) R14_fiq R13_fiq R12_fiq R11_fiq R10_fiq R9_fiq R8_fiq R7 R6 R5 R4 R3 R2 R1 R0 R14_fiq R13_fiq R12_fiq R11_fiq R10_fiq R9_fiq R8_fiq R14 (LR) R13 R12 R11 R10 R9 R8 CPSR CPSR SPSR_fiq SPSR_fiq Chế độ User Chế độ FIQ
Các thanh ghi được
sử dụng Các thanh ghi bị ẩn Các thanh ghi bị ẩnCác thanh ghi được sử dụng
Copy tới Chế độ ngoại lệ
Lưu địa chỉ quay trở về chế độ user
0x0000001C FIQ mode