Lõi Cortex cơ bản

Lịch sử phát triển hạt nhân ARM (arm kernel)

arm kernelKiến trúc
arm7armv6
cortex-m0armv6-m
cortex-m0+armv6-m
cortex-m3armv7-m
cortex-m4armv7-m
cortex-m7armv7-m
arm9ARMv6
arm11ARMv6
arm12ARMv6
cortex-a7armv7-a
cortex-a8armv7-a
cortex-a9armv7-a
cortex-a15armv7-a
cortex-A17armv7-a
cortex-A53armv8
cortex-A57armv8
cortex-A72armv8

Sơ đồ khối hệ thống chip dòng CortexM0

M0 system block diagram

 Hệ thống bao gồm:

  • Bộ điều khiển ngắt
  • Lõi M0
  • Xe buýt AHB
  • Bộ nhớ và thiết bị ngoại vi
  • Quản lý năng lượng
  • Cây đồng hồ
  • Hệ thống gỡ lỗi

General register

R0R1R2R3R4R5R6R7R8R9R10R11R12

thanh ghi m0 đặc biệt

SP (R13)LR (R14)PC (R15)KIỂM SOÁTxPSRPRIMASK

thanh ghi đặc biệt của họ m3 / m4 / m7

SP (R13)LR (R14)PC (R15)KIỂM SOÁTxPSRPRIMASKFAULTMASKBASEPRI

MSP và PSP

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 numberhướng dẫn (instruction)
reset1Power-on reset, system reset
NMI2Non-maskable interrupt
hardfault3Hardware error
SVCall11System call
PendSV13Suspend system call
systick15System 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-0xE000E00FBả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-0xE000ED3FKhối điều khiển hệ thống
0xE000EF00-0xE000EF03NVIC

Đăng ký NVIC

Địa chỉĐăng ký tênhướng dẫn
0xE000E100ISERĐăng ký cho phép ngắt
0xE000E180ICERNgắt đăng ký vô hiệu hóa
0xE000E200ISPRNgắt đăng ký đang chờ xử lý
0xE000E280ICPRXóa sổ đăng ký của các ngắt đang chờ xử lý
0xE000E400-0xE000E41CIPR0-7Thanh 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ênhướng dẫn
0xE000ED00CPUIDCPUID
0xE000ED04ICSRKiểm soát ngắt và đăng ký trạng thái
0xE000ED0CAIRCRĐăng ký để áp dụng ngắt và đặt lại
0xE000ED10SCRĐăng ký điều khiển hệ thống
0xE000ED14CCRThanh ghi điều khiển cấu hình
0xE000ED1CSHPR2Đăng ký ưu tiên của trình xử lý hệ thống 2
0xE000ED20SHPR3Đăng ký ưu tiên của trình xử lý hệ thống 3

Đăng ký SysTick

Địa chỉĐăng ký tênhướng dẫn
0xE000E010SYST_CSRKiểm soát SysTick và đăng ký trạng thái
0xE000E014SYST_RVRĐăng ký tải lại SysTick
0xE000E018SYST_CVRSysTick thanh ghi giá trị hiện tại
0xE000E01CSYST_CALIBĐăng ký hiệu chuẩn SysTick

quá trình khởi động cortex-m0

  1. Chương trình bắt đầu thực thi từ địa chỉ 0x00000000
  2. m0 chạy reset_handler từ từ thứ hai ở đầu tệp bin chương trình
  3. 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.)
  4. 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ẫnhướng dẫn
BKPTĐiểm ngắt
CPSIDTắt tổng số lần ngắt
CPSIEMở tổng số ngắt
DMBCá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
DSBCá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
ISBCá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
NOPHướng dẫn chạy không tải
SEVTạo sự kiện
SVCTạo ngắt cuộc gọi hệ thống SVC
WFEChờ 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ínhM0M3M4M7
basepr

Sơ đồ khối hệ thống M3

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ẫnTác dụnghướng dẫn
CPSID IPRIMASK = 1Tắt ngắt
CPSIE IPRIMASK = 0Mở ngắt
CPSID FFAULTMASK = 1Tắt bất thường
CPSIE FFAULTMASK = 0Mở 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ố seriCác loạisự ưu tiênGiới thiệu
0N / AN / AKhông có ngoại lệ nào đang chạy
1Cài lại-3 (cao nhất)Cài lại
2NMI-2Ngắt không che được (từ chân đầu vào NMI bên ngoài)
3Lỗi khó – Hard fault-1Tấ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.
4MemManageCó thể lập trìnhlỗi
5Lỗi quản lý bộ nhớCó thể lập trìnhCá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ý
6Sử dụngCó thể lập trìnhLỗi
7-10dự trữN / AN / A
11SVCallCó thể lập trìnhCá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
12Màn hình gỡ lỗiCó thể lập trìnhTrì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
13dự trữN / AN / A
14PendSVCó 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)
15SysTickCó thể lập trìnhBộ đế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)
16IRQ# 0Có thể lập trình
17IRQ# 1Có thể lập trình
255IRQ# 239Có 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).

nguồn : https://github.com/xiaowenxia/embedded-notes/blob/master/cortex.md

Bình luận về bài viết này