🌱 Core 3. ARM Cortex-M Core Registers

🌱 Core 3. ARM Cortex-M Core Registers

    Bài viết tiếp theo trong series giới thiệu về ARM Cortex-M sẽ nói về Các thanh ghi của lõi ARM Cortex-M và công dụng của chúng. Một phần rất hữu ích cho các developer làm việc với low-level, khi thường xuyên phải nhìn vào giá trị của các thanh ghi core để biết được trạng thái / hoạt động của core.

Cortex - M4 Processor Core Registers

    Như ở bài core 2 đã nói về Cortex - M4 Processor & Core, thì Cortex - M4 Core bao gồm ALU (bộ tính toán số học và logic), Address Register và bộ tăng địa chỉ, cùng với đó, nó bao gồm 16 thanh ghi core để thực hiện các chức năng khác nhau. Các thanh ghi này được đặt tên từ R0 đến R15 và đều có độ rộng 32 bits.

ARM Core Structure
ARM Core Structure

    ➤ Về cơ bản, để hiểu được về cách hoạt động của Core và hỗ trợ cho quá trình debug chương trình sau này, các bạn cần nắm được tác dụng của các thanh ghi Core này. 16 thanh ghi từ R0 đến R15 bao gồm 15 thanh ghi cho User và một thanh ghi PC (Program Counter).

Core Register in Arm Cortex-M4
Core Register in Arm Cortex-M4

  • Các thanh ghi từ R0 đến R12 là các thanh ghi mục đích chung (General Purpose Registers), có tác dụng trong quá trình xử lý data, tính toán. Tức các phép tính toán, toán tử, toán hạng, kết quả, ... sẽ được ALU tối ưu để đặt trên những thanh ghi này (hoặc người dùng lập trình - ngôn ngữ Assembly).
  • R13 (SP - Stack Pointer) trỏ đến một vùng nhớ đặc biệt gọi là Stack. Thanh ghi này có thể là MSP (Main SP) hoặc PSP (Process SP), dùng cho các Task trong RTOS.
    MSP hay PSP được quy định bởi bit[1] của thanh ghi CONTROL.
  • R14 (LR - Link Register) là thanh ghi chứa địa chỉ trả về của các lệnh rẽ nhánh (ví dụ như khi gọi 1 hàm thì LR sẽ chứa địa chỉ của lệnh tiếp theo sau khi hàm đó trả về).
  • R15 (PC - Program Counter) sử dụng để điều khiển quá trình thực thi các lệnh trong chương trình, PC sẽ chứa địa chỉ của lệnh tiếp theo mà Processor sẽ xử lý.

    👉 Một ví dụ để làm rõ hơn về hoạt động của LR và PC

ARM Function Call
ARM Function Call

    ➤ Khi hàm fun1() gọi tới hàm fun2()
  • PC sẽ nhảy đến địa chỉ của hàm fun2()
  • Lúc này LR sẽ chứa địa chỉ của lệnh tiếp theo, tức là lệnh fun1_ins_2; 
  • Và sau khi thực hiện xong hàm fun2() thì PC sẽ lấy giá trị của thanh ghi LR để trỏ đến lệnh tiếp theo (fun1_ins_2) để tiếp tục thực hiện.

Một số thanh ghi chức năng đặc biệt 

    Một trong những thanh ghi quan trọng của Core là tập thanh ghi xPSR (Program Status Registers), bao gồm 3 thanh ghi:

ARM xPSR Register (Program Status Registers)
xPSR (Program Status Registers)

  • Application Program Status Register (APSR)
    ARM APSR Register
    ARM APSR Register
    Thanh ghi APSR chứa tất cả các cờ điều kiện N, Z, C, V, Q phục vụ cho quá trình tính toán của chương trình, chi tiết chức năng của từng cờ có trong hình trên.

  • Interrupt Program Status Register (IPSR)

    Sử dụng 9 bit LSB để chứa exception của chương trình hiện tại (số lượng bit sẽ khác nhau giữa các dòng Processor do số lượng ngắt support khác nhau).

    Ví dụ:

ARM APSR Register
ARM IPSR Register

  • Execution Program Status Register (EPSR)

ARM EPSR Register
ARM EPSR Register

    Bit quan trọng nhất của thanh ghi này là T bit (Bit [24]) dùng để xác định tập lệnh mà Processor đang sử dụng.

  • T = 1: Tập lệnh Thumb ISA
  • T = 0: Tập lệnh ARM ISA
    ARM Cortex Mx chỉ hỗ trợ tập lệnh Thumb vì vậy T bit nên được duy trì là 1.

    ➤ Sự khác nhau giữa 2 tập lệnh Thumb và ARM

ARM Thumb
Data Processing Instructions Access to barrel shifter and ALU Separate barrel shifter & ALU instructions
Program Status Register Read – write in privileged mode No direct access
Register Usage 15 general purpose registers + PC 8 general purpose registers + 7 high registers

Chức năng các thanh ghi theo APCS

    APCS - viết tắt của ARM Procedure Call Standard, có quy định về tên gọi và chức năng của các thanh ghi (APCS register names and roles)

  • Scratch Register: Các thanh ghi R0-R3 / R12 sử dụng với mục đích lưu trữ giá trị tính toán trong hàm (tham số, giá trị trả về). Các chương trình con (function, ISR) sử dụng các thanh ghi này để tạm lưu giá trị tính toán nên khi được gọi, chúng cần được lưu trữ lại (stacking) ➩ Caller saved.
  • Register Variables: Các thanh ghi R4-R11 có chung mục đích lưu trữ các thành phần tính toán trong subroutines. Bản thân chương trình con cũng cần tính toán và lưu trữ các giá trị tính toán của chúng ➩ Callee saved.
  • Static Base (Thanh ghi R9): đóng vai trò lưu trữ offset trong code, sử dụng cho re-entrant code ROM code, và shared libraries.
  • Frame Pointer (Thanh ghi R11): dùng để truy cập vào các biến auto trong stack frame.

ARM Procedure Call Standard

>>>>>> Follow ngay <<<<<<<

Để nhận được những bài học miễn phí mới nhất nhé 😊
Chúc các bạn học tập tốt 😊

Đăng nhận xét

Mới hơn Cũ hơn
//
Avatar

Sign In

New User? Sign Up Now

or

By Signing In my Blog, you agree with: Privacy Policy & Cookie Policy.