Title Image

Blog Logo

Core 4. Access level and Operation modes of the processor

🌱 Core 4. Access level and Operation modes of the processor

    Ở bài trước mình đã nói về các Core Registers, các Core Registers này có những chức năng khác nhau, và có mức độ quan trọng khác nhau, không phải lúc nào chúng ta cũng có thể dễ dàng tác động đến chúng. 

    Cùng với đó, Vi điều khiển STM32 hỗ trợ hệ điều hành RTOS, vì vậy việc cần phân chia mức độ truy cập vào các thanh ghi, bộ nhớ là vô cùng quan trọng. Hãy cùng mình tìm hiểu về chúng trong bài viết này nhé!

    👉 Operation Modes

    Bộ xử lý Cortex Mx có 2 chế độ hoạt động chính: Thread Mode & Handler Mode.

  1. Thread Mode - User Mode
    Khi khởi động, vi xử lý đều bắt đầu ở Thread mode, ở chế độ này, code của chương trình được thực hiện tuần tự trong hàm main(). Bất cứ khi nào xảy ra Ngắt hay Exception, vi xử lý sẽ chuyển sang chế độ Handler Mode. Ở chế độ này, thanh ghi SP được sử dụng có thể là MSP hoặc PSP (thường ứng dụng trong RTOS).
  2. Handler Mode
    Bất cứ khi nào xảy ra Ngắt hay Exception, vi xử lý sẽ nhảy vào ISR (Interrupt Service Routine) tương ứng, tức là chuyển sang chế độ Handler Mode. Ở chế độ này, chỉ có MSP được phép sử dụng. 
    Để phân biệt 2 chế độ này, vi xử lý chỉ thị bằng 9 bit LSB của thanh ghi IPSR.

Core
  • IPSR = 0 thì vi xử lý hoạt động ở chế độ Thread Mode.
  • IPSR khác 0 thì vi xử lý hoạt động ở chế độ Handler Mode.    

    👉 Access Levels

    ARM Cortex Mx cung cấp 2 Access levels - Mức độ truy cập khác nhau, đó là Privileged - Chế độ đặc quyền (tạm viết tắt là PRIV) và Unprivileged - Chế độ không đặc quyền (tạm viết tắt là UN-PRIV).
    Chế độ UN-PRIV hạn chế quyền truy cập vào một số thanh ghi hệ thống và vùng nhớ được bảo vệ. Nếu cố gắng truy cập các thanh ghi và vùng nhớ này sẽ gây ra Hardfault. Ngược lại, chế độ PRIV sẽ cho phép truy cập vào các thanh ghi và vùng nhớ này. 
    Để phân biệt 2 chế độ này, vi xử lý chỉ thị bằng bit[0] của thanh ghi CONTROL.

Core
  • Mặc địnhbit[0] = 0, chương trình chạy với chế độ PRIV
  • Trong chế độ Thread Mode, chương trình có thể chuyển sang chế độ UN-PRIV bằng cách set bit[0] = 1. Nhưng không thể chuyển ngược lại từ UN-PRIV sang chế độ PRIV.
  • Việc chuyển từ UN-PRIV sang chế độ PRIV chỉ có thể được thực hiện trong Handler Mode.
  • Ở chế độ Handler Mode, chương trình luôn thực thi với PRIV.
    Chi tiết xem tại hình bên dưới đây!!

Core

>>>= Follow ngay =<<<

Để theo dõi 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

0 Nhận xét