Nó sẽ được sử dụng trong ngắt msp và psp được sử dụng trong ngăn xếp luồng, được chuyển đổi bằng cách cấu hình thanh ghi CONTROL.
Sau khi hệ thống được đặt lại, msp được sử dụng theo mặc định và msp cũng được sử dụng trong các lần ngắt.
xPSR
IPSR có thể được sử dụng để xác định ngắt hiện đang ở đâu.
PRIMASK
Thanh ghi mặt nạ ngắt, ghi 1 để che tất cả các ngắt (ngoại trừ ngắt không che được và hardfault)
KIỂM SOÁT
Viết 1 ở bit đầu tiên để chuyển sang PSP
FAULTMASK
Chặn tất cả các lỗi (NMI không bị ảnh hưởng)
BASEPRI
Che chắn tất cả các ngắt có mức độ ưu tiên không cao hơn một giá trị cụ thể
Hoạt động ngăn xếp
Xếp chồng lên nhau
Con trỏ ngăn xếp luôn trỏ đến dữ liệu cuối cùng trên ngăn xếp, mỗi lần trước khi lưu trữ dữ liệu (đẩy), SP đầu tiên sẽ giảm
Ngoại lệ và ngắt
m0 hỗ trợ lên đến 32 ngắt bên ngoài
Hệ thống bất thường
Chủ yếu được sử dụng cho hệ điều hành và xử lý lỗi
Loại ngoại lệ
Exception number
hướng dẫn (instruction)
reset
1
Power-on reset, system reset
NMI
2
Non-maskable interrupt
hardfault
3
Hardware error
SVCall
11
System call
PendSV
13
Suspend system call
systick
15
System tick
NVIC có thể được lồng ghép bộ điều khiển ngắt vectơ
Các ngắt có thể được lồng vào nhau
Các ngắt có cùng mức độ ưu tiên không được lồng vào nhau
Cùng một ngắt không thể được lồng vào nhau
Đăng ký vận hành hệ thống
Trên thực tế, rất nhiều đăng ký do hệ thống quản lý
Dải địa chỉ
Đăng ký mô tả
0xE000E008-0xE000E00F
Bảng khối điều khiển hệ thống
0xE000E010-0xE000E01F
Để dành
0xE000E010-0xE000E01F
Đăng ký hoạt động SysTick
0xE000E100-0xE000E4EF
Đăng ký hoạt động NVIC
0xE000ED00-0xE000ED3F
Khối điều khiển hệ thống
0xE000EF00-0xE000EF03
NVIC
Đăng ký NVIC
Địa chỉ
Đăng ký tên
hướng dẫn
0xE000E100
ISER
Đăng ký cho phép ngắt
0xE000E180
ICER
Ngắt đăng ký vô hiệu hóa
0xE000E200
ISPR
Ngắt đăng ký đang chờ xử lý
0xE000E280
ICPR
Xóa sổ đăng ký của các ngắt đang chờ xử lý
0xE000E400-0xE000E41C
IPR0-7
Thanh ghi cấu hình ưu tiên ngắt
Khối điều khiển hệ thống Thanh ghi SCB
Địa chỉ
Đăng ký tên
hướng dẫn
0xE000ED00
CPUID
CPUID
0xE000ED04
ICSR
Kiểm soát ngắt và đăng ký trạng thái
0xE000ED0C
AIRCR
Đăng ký để áp dụng ngắt và đặt lại
0xE000ED10
SCR
Đăng ký điều khiển hệ thống
0xE000ED14
CCR
Thanh ghi điều khiển cấu hình
0xE000ED1C
SHPR2
Đăng ký ưu tiên của trình xử lý hệ thống 2
0xE000ED20
SHPR3
Đăng ký ưu tiên của trình xử lý hệ thống 3
Đăng ký SysTick
Địa chỉ
Đăng ký tên
hướng dẫn
0xE000E010
SYST_CSR
Kiểm soát SysTick và đăng ký trạng thái
0xE000E014
SYST_RVR
Đăng ký tải lại SysTick
0xE000E018
SYST_CVR
SysTick thanh ghi giá trị hiện tại
0xE000E01C
SYST_CALIB
Đăng ký hiệu chuẩn SysTick
quá trình khởi động cortex-m0
Chương trình bắt đầu thực thi từ địa chỉ 0x00000000
m0 chạy reset_handler từ từ thứ hai ở đầu tệp bin chương trình
Hàm reset_handler bắt đầu thực hiện một số khởi tạo cần thiết (sao chép hàm ramfunc, khởi tạo heap, khởi tạo biến toàn cục và biến tĩnh, v.v.)
Chuyển đến chức năng chính
Bảng vectơ ngắt
con trỏ sp
địa chỉ resetHandler
Địa chỉ NMIHandler
địa chỉ khó mặc định
để dành
địa chỉ systickHandler
……
Lớn và nhỏ
m0 hỗ trợ chế độ big-endian và little-endian, nhưng các công ty chip nói chung chọn chế độ little-endian.
Stack
Tăng trưởng đống
Ngăn xếp tăng dần xuống
Thanh ghi Stack
xPSR
PC
LR
R12
R3
R2
R1
R0
Bộ hướng dẫn khác
hướng dẫn
hướng dẫn
BKPT
Điểm ngắt
CPSID
Tắt tổng số lần ngắt
CPSIE
Mở tổng số ngắt
DMB
Cách ly bộ nhớ dữ liệu chỉ bắt đầu các hoạt động truy cập bộ nhớ tiếp theo sau khi tất cả các hoạt động truy cập bộ nhớ trước đó đã được thực hiện
DSB
Cách ly đồng bộ hóa dữ liệu nghiêm ngặt hơn DMB: chỉ sau khi tất cả các hoạt động truy cập bộ nhớ trước khi nó được thực thi, các hướng dẫn sau mới được bắt đầu
ISB
Các hướng dẫn được đồng bộ hóa và cách ly, nghiêm ngặt nhất: đường ống sẽ được làm sạch để đảm bảo rằng tất cả các lệnh trước đó được thực thi trước khi các lệnh tiếp theo được thực thi.
MRS
Đọc dữ liệu từ các thanh ghi đặc biệt đến thanh ghi chung
MSR
Đọc dữ liệu từ thanh ghi chung đến thanh ghi đặc biệt
NOP
Hướng dẫn chạy không tải
SEV
Tạo sự kiện
SVC
Tạo ngắt cuộc gọi hệ thống SVC
WFE
Chờ sự kiện
WFI
Đang chờ ngắt
Sự khác biệt M0 / M3 / M4 / M7
Kiến trúc M0 armv6-M
Kiến trúc M3 armv7-M có thêm một thanh ghi basepri để ngăn chặn sự gián đoạn của một mức độ ưu tiên nhất định hoặc mức độ ưu tiên thấp hơn. Thanh ghi mặt nạ lỗi cung cấp nhiều tính năng quản lý lỗi hơn. Bit0 của thanh ghi CONTROL được sử dụng để xác định xem đó là chế độ đặc quyền hay chế độ luồng người dùng. 32 là tính năng phân đoạn bit lệnh ngón tay cái. Xử lý trường bit. Bộ đa xử lý hỗ trợ tối đa 240 ngắt. Phân chia phần cứng. Bộ bảo vệ bộ nhớ. Thêm tính năng gỡ lỗi và truy tìm.
Dấu chấm động kiến trúc M4 armv7-M có các lệnh SIMD (nhiều lệnh chu kỳ đơn) thuật toán bão hòa MAC chu kỳ đơn (phép nhân và tích lũy MAC)
đặc tính
M0
M3
M4
M7
basepr
Sơ đồ khối hệ thống M3
Hướng dẫn lắp ráp ngắt chuyển mạch nhanh M3
hướng dẫn
Tác dụng
hướng dẫn
CPSID I
PRIMASK = 1
Tắt ngắt
CPSIE I
PRIMASK = 0
Mở ngắt
CPSID F
FAULTMASK = 1
Tắt bất thường
CPSIE F
FAULTMASK = 0
Mở ngoại lệ
Thanh ghi ĐIỀU KHIỂN lõi M3
CONTROL [1] Lựa chọn con trỏ ngăn xếp 0 = Chọn con trỏ ngăn xếp chính MSP (giá trị mặc định sau khi đặt lại) 1 = Chọn PSP con trỏ ngăn xếp quy trình Ở cấp độ luồng hoặc cơ bản (không phản hồi với ngoại lệ-Chú thích), bạn có thể sử dụng PSP. Trong chế độ xử lý, chỉ MSP được phép, vì vậy bạn không được ghi 1 vào bit này vào lúc này.
CONTROL [0] 0 = Chế độ chuỗi đặc quyền 1 = Chế độ chuỗi cấp người dùng Chế độ xử lý luôn có đặc quyền.
Ngoại lệ và ngắt
Cortex-M3 hỗ trợ một số lượng lớn các ngoại lệ, bao gồm 16-4-1 = 11 ngoại lệ hệ thống và lên đến 240 ngắt bên ngoài được gọi là IRQ.
số seri
Các loại
sự ưu tiên
Giới thiệu
0
N / A
N / A
Không có ngoại lệ nào đang chạy
1
Cài lại
-3 (cao nhất)
Cài lại
2
NMI
-2
Ngắt không che được (từ chân đầu vào NMI bên ngoài)
3
Lỗi khó – Hard fault
-1
Tất cả các lỗi bị vô hiệu hóa sẽ được “khiếu nại” là lỗi khó. Các lý do để tắt bao gồm hiện đang bị vô hiệu hóa hoặc FAULTMASK đang được đặt.
4
MemManage
Có thể lập trình
lỗi
5
Lỗi quản lý bộ nhớ
Có thể lập trình
Các vi phạm truy cập MPU và truy cập vào các địa điểm bất hợp pháp có thể được kích hoạt. Cố gắng tìm nạp các hướng dẫn trong “khu vực không thực thi” cũng sẽ gây ra lỗi này. Lỗi bus nhận được phản hồi lỗi từ hệ thống bus. Nguyên nhân có thể là hủy bỏ tìm nạp trước hoặc hủy bỏ dữ liệu hoặc cố gắng truy cập bộ đồng xử lý
6
Sử dụng
Có thể lập trình
Lỗi
7-10
dự trữ
N / A
N / A
11
SVCall
Có thể lập trình
Các trường hợp ngoại lệ do thực thi lệnh gọi dịch vụ hệ thống (SVC) đưa ra
12
Màn hình gỡ lỗi
Có thể lập trình
Trình theo dõi gỡ lỗi (điểm ngắt, điểm quan sát dữ liệu hoặc yêu cầu gỡ lỗi bên ngoài
13
dự trữ
N / A
N / A
14
PendSV
Có thể lập trình
“Yêu cầu có thể chờ được” đối với thiết bị hệ thống (yêu cầu có thể gửi được)
15
SysTick
Có thể lập trình
Bộ đếm thời gian đánh dấu hệ thống (nghĩa là bộ hẹn giờ cơ sở thời gian tràn định kỳ-Chú thích)
16
IRQ
# 0
Có thể lập trình
17
IRQ
# 1
Có thể lập trình
…
…
…
…
255
IRQ
# 239
Có thể lập trình
Bộ bảo vệ bộ nhớ MPU
Cortex-M3 có bộ bảo vệ bộ nhớ tùy chọn. Với nó, bạn có thể áp đặt các hạn chế truy cập khác nhau đối với quyền truy cập đặc quyền và quyền truy cập cấp người dùng. Khi một vi phạm (bị vi phạm) được phát hiện, MPU sẽ tạo ra một ngoại lệ lỗi, có thể được phân tích bằng quy trình dịch vụ ngoại lệ lỗi và sửa chữa khi có thể. Có nhiều cách để chơi MPU. Phổ biến nhất là sử dụng MPU của hệ điều hành để dữ liệu của mã đặc quyền, bao gồm cả dữ liệu của chính hệ điều hành, không bị các chương trình người dùng khác làm hỏng. Khi MPU bảo vệ bộ nhớ, nó được quản lý theo khu vực (văn bản gốc của “khu vực” là khu vực và chúng tôi sẽ không dịch thuật ngữ này sang tiếng Trung trong tương lai-Chú thích). Nó có thể đặt một số vùng bộ nhớ là chỉ đọc, do đó tránh việc nội dung ở đó vô tình bị thay đổi; nó cũng có thể cô lập các vùng dữ liệu giữa các tác vụ khác nhau trong một hệ thống đa nhiệm. Nói một cách dễ hiểu, nó sẽ làm cho các hệ thống nhúng mạnh mẽ và đáng tin cậy hơn (nhiều tiêu chuẩn công nghiệp, đặc biệt là hàng không, quy định rằng MPU phải được sử dụng để thực hiện các chức năng bảo vệ-Chú thích).