🌱 Core 3. ARM Cortex-M Core Registers
👉 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.
![]() |
CPU 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 |
- 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
- 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:
- Application
Program Status Register (APSR)
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ụ:
- Execution
Program Status Register (EPSR)
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
➤ Sự khác nhau giữa 2 tập lệnh Thumb và ARM
![EPSR Core](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd9g_q55QLhyphenhyphenCpU8ILfJYCVDtK2wbdznYCcJzoKQDkaQhV3-QTeLMqfXBgmWEMoAKkTUa6gh7l6rDGci8DKvlBfVoOA90eflLOuBzsC8fX4NoTt-tpYA1f1nVI6p6_0D2qa9YEOW930Xs/w640-h218/image.png)
👉 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.
>>>= Follow ngay =<<<
0 Nhận xét