You are on page 1of 46

Chương 1

MPU so với MCU?


• Bộ vi xử lý (MPU) = CPU có dung lượng lớn hiệu suất tính toán và xử lý,
thích hợp cho PC, máy chủ, máy tính lớn
• Bộ vi điều khiển (MCU) = CPU ít phức tạp hơn + Bộ nhớ + I/O trong một chip
duy nhất, phù hợp với ứng dụng hướng điều khiển (nhúng hệ thống)
Chương 2
- Kiến thức chung của hệ thống máy tính: CPU, memory, I/O, hệ thống buses,
power, clocks.
+ Central Processor Unit (CPU): Bộ xử lý trung tâm (heart of the microcomputer
system)
• Thực hiện lệnh (instruction) trong bộ nhớ chương trình
• Fetch: Đọc lệnh từ bộ nhớ chương trình (Program Memory)
• Decode: Giải mã lệnh
• Execute: Thực hiện lệnh
• Dữ liệu (data) liên quan đến lệnh đang thực hiện được CPU đọc/ghi từ bộ nhớ dữ
liệu (Data Memory) với I/O thông qua hệ thống bus
+ Bộ nhớ hệ thống
• Nơi diễn ra các chương trình và dữ liệu được lưu trữ /truy cập bởi CPU
• Hai loại mem.
– Program Memory (Bộ nhớ chương trình)
– Data Memory (Bộ nhớ dữ liệu)
+ Hệ thống con đầu vào-đầu ra
• aka. Hệ thống con ngoại vi
• bao gồm tất cả các thành phần và các thiết bị ngoại vi cho phép CPU để trao đổi
thông tin (dữ liệu) với các thiết bị khác, hệ thống, hoặc thế giới bên ngoài
• Liệt kê một số thành phần I/O?\: bàn phím, chuột, màn hình, máy in…..
+ Hệ thống Buses
• Tập hợp các đường kết nối CPU, Memory, and I/O Subsystem (các tập hợp line
signal to connect between CPU, memory and port on/ra and thiết bị ngoại vi)
• 3 loại xeBus
– Bus địa chỉ (bus address)
– Bus dữ liệu (bus data)
– Bus điều khiển (bus control)
+ Bộ vi xử lý (MPU) = CPU có dung lượng lớn hiệu suất tính toán và xử lý, thích
hợp cho PC, máy chủ, máy tính lớn– để phát triển một hệ thống máy vi tính cần
MPU + {Bộ nhớ + giao diện I/O} được triển khai bên ngoài
+ Bộ vi điều khiển (MCU) = CPU ít phức tạp hơn + Bộ nhớ + Giao diện I/O trong
một chip đơn, thích hợp cho các ứng dụng hướng điều khiển (những hệ thống
nhúng) – Máy tính trên chip / Hệ thống trên chip (SoC)
+ Vi điều khiển được thiết kế để thực hiện nhiệm vụ cụ thể mà mối quan hệ của
đầu vào và đầu ra được xác định.
• Vì các ứng dụng rất cụ thể nên chúng cần tài nguyên nhỏ như RAM, ROM, I/O
cổng, v.v. và do đó có thể được nhúng trên một chip đơn giảm kích thước và chi
phí.
• Vi điều khiển hoạt động từ vài MHz đến 100-200 MHz
• Vi điều khiển không thể được sử dụng thay cho bộ vi xử lý :
Một số lý do tại sao vi điều khiển không thể được sử dụng thay cho bộ vi xử lý
là:
1. Tính năng xử lý: Vi điều khiển có khả năng xử lý dữ liệu và tính toán thấp hơn
so với bộ vi xử lý, do đó chúng không đủ mạnh để xử lý các tác vụ phức tạp.
2. Bộ nhớ: Vi điều khiển thường có bộ nhớ hạn chế, không đủ để lưu trữ các
chương trình và dữ liệu phức tạp. Trong khi đó, bộ vi xử lý có bộ nhớ lớn hơn
và có khả năng mở rộng để đápứng các nhu cầu xử lý dữ liệu và tính toán
phức tạp hơn.
3. Độ tin cậy: Vi điều khiển thường được sử dụng trong các ứng dụng nhúng,
trong đó độ tin cậy và hoạt động liên tục là rất quan trọng. Tuy nhiên, các bộ
vi xử lý được thiết kế để đáp ứng các tiêu chuẩn cao hơn về độ tin cậy và hoạt
động ổn định trong thời gian dài.
4. Tính linh hoạt: Vi điều khiển thường được sử dụng trong các ứng dụng có tính
linh hoạt cao, trong đó các thiết bị đầu vào/đầu ra và tính năng điều khiển
được tích hợp trực tiếp vào thiết bị. Trong khi đó, bộ vi xử lý có khả năng kết
nối với nhiều thiết bị đầu vào/đầu ra khác nhau và có tính linh hoạt cao hơn
trong việc phát triển các ứng dụng phức tạp và đa dạng.

+ Bộ vi xử lý tìm ứng dụng nơi tác vụ không được chỉ định như phát triển phần
mềm, trò chơi, chỉnh sửa ảnh, tạo tài liệu, v.v.
Trong những trường hợp như vậy, mối quan hệ giữa đầu vào và đầu ra không được
xác định.
• Họ cần lượng tài nguyên cao như RAM, ROM, v.v.
• Bộ vi xử lý không thể sử dụng độc lập.
Họ cần các thiết bị ngoại vi khác như RAM, ROM, cổng I/O, v.v. và do đó, một hệ
thống được thiết kế xung quanh một bộ vi xử lý là khá tốn kém.
• Bộ vi xử lý hoạt động trên 1GHz như họ thực hiện các nhiệm vụ phức tạp.
+ Kiến trúc RISC so với CISC
• Máy CISC (Complex Instruction Set Computing): Máy tính có
phức tạp kiến trúc lệnh
– các từ lệnh có độ dài thay đổi, nghĩa là, với số bit khác nhau, nhỏ kích thước mã
và nhiều hướng dẫn phức tạp có xung nhịp ở cấp độ máy.
– hoàn thành càng nhiều càng tốt với mỗi hướng dẫn, để tạo ra các chương trình
đơn giản -> hỗ trợ công việc của người lập trình trong khi tăng độ phức tạp của
phần cứng.
• Máy RISC (Reduced Instruction Set Computing): Máy tính có lệnh thu gọn kiến
trúc
– hướng dẫn đơn giản đơn giản hóa cấu trúc phần cứng, nhưng chương trình dài
hơn
– Thiết kế kỳ vọng rằng bất kỳ việc thực hiện lệnh đơn lẻ nào cũng được giảm
thiểu—ở mức gần một chu kỳ bộ nhớ dữ liệu đơn lẻ—khi so sánh với hệ thống
CISC.
• Người ta thường chấp nhận rằng bộ vi điều khiển RISC nhanh hơn, mặc dù điều
này có thể không nhất thiết đúng cho tất cả các hướng dẫn
• ARM: Máy RISC tiên tiến
+ Cấu trúc CPU • CPU: Central Processing Unit (Bộ xử lý trung tâm)
– ALU (Khối số học - logic)
– CU (Khối điều khiển)
– Registers (Tập các thanh ghi)
– BIL + Internal buses
• Software Components
– Instruction Set (Tập lệnh)
– Addressing Modes (các chế độ định địa chỉ)
+ Chức năng các khối bên trong CPU
• CU (Control Unit) - Khối điều khiển
– là một FSM (máy trạng thái) để điều khiển hoạt động của CPU
– thực hiện chu trình 3 bước Fetch-Decode-Execute (Nạp lệnh-Giải mã lệnh-Thực
hiện lệnh) (kiến trúc pipelined)
• ALU (Arithmetic Logic Unit) – Khối số học và logic
– thực hiện các phép toán số học và logic
– nhận dữ liệu đầu vào từ các thanh ghi và trả kết quả về (các) thanh ghi
• Registers – Tập hợp các thanh ghi
– Vai trò như bộ nhớ tạm thời để lưu trữ dữ liệu, địa chỉ các vùng nhớ, thông tin
điều khiển để CPU hoạt động. Thanh ghi là đơn vị bộ nhớ nhanh nhất (fastes) trong
hệ thống máy tính, và cũng có dung lượng (capacity) nhỏ nhất (so sánh với các loại
bộ nhớ khác như bộ nhớ chương trình / dữ liệu)
– 2 nhóm: các thanh ghi đa mục đích (GPRs), các thanh ghi chức năng đặc biệt
• Internal Bus – Kết nối các khối bên trong CPU
• BIL (Bus Interface Logic) – Điều khiển kết nối giữa system bus (address, data,
control) với internal bus
+ Các thanh ghi bên trong CPU
• IR (Instruction Register – Thanh ghi lệnh): chứa lệnh đang được thực hiện
• PC (Program Counter: Thanh ghi bộ đếm chương trình): chứa địa chỉ của lệnh
tiếp theo sẽ được CPU thực hiện. PC được tự động tăng lên chỉ đến địa chỉ lệnh
tiếp theo mỗi khi một lệnh được fetch và decode. Trong lệnh nhảy (JUMP) PC
được gán giá trị địa chỉ lệnh do lệnh nhảy quy định.
• SP (Stack Pointer – Con trỏ ngăn xếp): chứa địa chỉ để CPU quay về sau khi thực
hiện một chương trình con (hàm). SP thường chỉ đỉnh của STACK
• PSR (Program Status Register – Thanh ghi trạng thái chương trình): lưu trữ trạng
thái thực hiện chương trình thông qua các bit được định nghĩa bên trong thanh ghi
• Các thanh ghi đa mục đích: dùng lưu trữ dữ liệu, địa chỉ, biến…
• Các thanh ghi khác (tùy mỗi họ VXL)
+ Memory Organization (Tổ chức bộ nhớ)
• Các loại bộ nhớ
• Memory Banks
• Little-Endian vs Big-Endian
• Von Neumann vs Harvard Architectures
• Memory & CPU data exchange
• Memory Map
• ARM Cortex-M4 Memory Map
+ Little Endian and Big Endian
• Little-Endian ordering: Khi dữ liệu có trên 1 byte thì byte thấp nằm ở vị trí địa
chỉ thấp, byte cao nằm ở vị trí địa chỉ cao trong bộ nhớ.
• Big-Endian ordering: Ngược lại, byte thấp nằm ở vị trí địa chỉ cao và byte cao
nằm ở địa chỉ thấp.
+ IO Subsystem Organization
• Tổ chức vào ra (Input/Output) của hệ VXL bao gồm tất cả các thiết bị (ngoại vi)
kết nối với bus hệ thống (trừ CPU và bộ nhớ):
– Thiết bị vào, thiết bị ra, thiết bị vào/ra
– Các thanh ghi chức năng đặc biệt hoặc các phần cứng đặc biệt để quản lý hoạt
động vào/ra của hệ VXL
• Input transaction: CPU <- Device
– Switches, keyboard, barcode reader, position encoder, ADC, etc.
• Output transaction: CPU -> Device
– LED display, LCD display, buzzer, motor interface, DAC, etc.
• Input + Output device: CPU <-> Device
– Serial interface (UART), bi-directional parallel ports,
– mass storage devices (flash memory cards, hard disk interfaces)
+ Các thiết bị vào ra tiêu biểu
• Timer (Bộ định thời): Các timer có thể được lập trình cho khoảng thời gian định
trước. Ví dụ: để đo khoảng thời gian giữa hai sự kiện, tạo sự kiện tại các khoảng
thời gian xác định, hoặc tạo tín hiệu ở tần số xác định, ứng dụng cho bộ điều biến
độ rộng xung (PWM) và nhiều sự kiện khác
. • Watch-Dog-Timer (WDT - Đồng hồ bấm giờ): Đây là một loại timer đặc biệt,
được sử dụng như một thiết bị an toàn. WDT sẽ reset hệ thống (chương trình) nếu
không nhận được tín hiệu do chương trình tạo ra sau mỗi đơn vị thời gian X, một
tính năng hữu ích trong một số ứng dụng đề phòng trường hợp chương trình bị
treo. WDT cũng có thể được cấu hình để tự tạo tín hiệu ngắt trong khoảng thời
gian đều đặn.
• Communication Interfaces (Các giao diện truyền thông): bao gồm UART, SPI,
USB, I2C, etc.
• ADC (Bộ chuyển đổi tương tự - số)
• DAC (Bộ chuyển đổi số - tương tự)
• Mạch nạp và debug chương trình: được sử dụng trong quá trình phát triển hệ
thống, để tải chương trình vào MCU và hỗ trợ trong quá trình gỡ lỗi (debug).
Chúng bao gồm màn hình, trình gỡ lỗi nền và trình giả lập nhúng.
+ I/O Interface (Giao diện vào ra)
• Giao diện vào ra kết nối giữa thiết bị ngoại vi với bus hệ thống
• Bao gồm các thanh ghi để trao đổi dữ liệu (data), thông tin điều khiển (control)
và thông tin trạng thái (status) giữa CPU và thiết bị ngoại vi
• Có thể bao gồm các mạch giải mã địa chỉ để thực hiện việc điều khiển đến các
thiết bị ngoại vi cụ thể (tùy từng họ VXL/VĐK)
+ I/O-mapped I/O vs Memory-mapped I/O
• I/O-mapped I/O:
– Sử dụng các không gian địa chỉ tách biệt cho bộ nhớ (memory) và thiết bị ngoại
vi (I/O)
– cần phần cứng điều khiển điều khiển đặc biệt và các lệnh đặc biệt để CPU phân
biệt đang truy cập bộ nhớ (memory) hay ngoại vi (I/O)
– Ex: VXL Intel 80x86, Zilog Z80
• Memory-mapped I/O:
– Sử dụng chung một không gian địa chỉ cho cả bộ nhớ (memory) và thiết bị ngoại
vi (I/O) -> các thanh ghi của thiết bị ngoại vi được xem như một phần của bộ nhớ
– Được sử dụng trong thiết kế hệ thống nhúng hiện nay
Other Registers & Peripherals
• Hệ VXL có thể có những thanh ghi và/hoặc thiết bị khác không được nối ra bên
ngoài hoặc không được sử dụng như bộ nhớ để lưu trữ dữ liệu
• Bao gồm: các thanh ghi chức năng đặc biệt, các bộ định thời, etc.
• Liên quan đến hoạt động của hệ thống (CPU), quản lý năng lượng, etc.
Cấu trúc của một giao diện vào ra
• Control Register(s): Thanh ghi điều khiển
• Status Register(s): Thanh ghi trạng thái
• Data Registers(s): Thanh ghi dữ liệu
+Giao diện vào/ra song song & nối tiếp
• Trong hệ VXL, hầu hết các thiết bị ngoại vi kết nối với bus dữ liệu (data bus)
thông qua giao diện (kết nối) song song -> n-bit được truyền cùng lúc -> cần n dây
dẫn song song
• Riêng các I/O port có thể kết nối với các thiết bị ngoại vi bên ngoài hệ thống qua
các giao diện song song (parallel) hay nối tiếp (serial)
– Giao tiếp/Cổng song song (parallel I/O ports)
– Giao tiếp/Cổng nối tiếp (serial I/O ports)
• Giao tiếp nối tiếp: RS-232 (UART)
• Giao tiếp song song: ISA/EISA/PCI buses
• Ưu nhược điểm của các giao tiếp song song và nối tiếp
Giao tiếp song song:
Ưu điểm:
1. Tốc độ truyền dữ liệu cao: Giao tiếp song song cho phép truyền nhiều bit dữ
liệu cùng lúc, do đó tốc độ truyền dữ liệu nhanh hơn so với giao tiếp nối tiếp.
2. Độ tin cậy cao: Giao tiếp song song được thiết kế để truyền dữ liệu trên nhiều
đường truyền song song, do đó nó có khả năng khắc phục lỗi dữ liệu tốt hơn
so với giao tiếp nối tiếp.
3. Khả năng điều khiển: Giao tiếp song song cho phép thiết bị điều khiển các
thiết bị ngoại vi khác, ví dụ nhưmáy in, màn hình và bảng điều khiển, một cách
dễ dàng hơn.
Nhược điểm:
1. Đòi hỏi nhiều dây cáp: Giao tiếp song song đòi hỏi việc sử dụng nhiều dây cáp
để truyền dữ liệu trên nhiều đường truyền song song, do đó cần thiết kế mạch
điện phức tạp hơn.
2. Chi phí cao: Do yêu cầu nhiều dây cáp và mạch điện phức tạp hơn, giao tiếp
song song có chi phí cao hơn so với giao tiếp nối tiếp.
3. Độ dài cáp hạn chế: Giao tiếp song song có thể bị ảnh hưởng bởi độ dài của
cáp, do đó độ dài cáp phải được giới hạn để đảm bảo tín hiệu được đồng bộ
hóa.
Giao tiếp nối tiếp:
Ưu điểm:
1. Sử dụng ít cáp: Giao tiếp nối tiếp chỉ sử dụng một dây cáp để truyền dữ liệu,
do đó yêu cầu ít dây cáp hơn so với giao tiếp song song.
2. Chi phí thấp: Do yêu cầu ít dây cáp và mạch điện đơn giản hơn, giao tiếp nối
tiếp có chi phí thấp hơn so với giao tiếp song song.
3. Độ dài cáp dài: Giao tiếp nối tiếp có thể được sử dụng để truyền dữ liệu trên
các đường truyền có độ dài lớn hơn so với giao tiếp song song.
Nhược điểm:
1. Tốc độ truyền dữ liệu chậm: Giao tiếp nối tiếp chỉ truyền một bit dữ liệu tại
một thời điểm, do đó tốc độ truyền dữ liệu chậm hơn so với giao tiếp song
song.
2. Độ tin cậy thấp: Giao tiếp nối tiếp có thể dễ bị nhiễu và lỗi dữ liệu, do chỉ sử
dụng một dây cáp để truyền dữ liệu.
3. Khó điều khiển: Giao tiếp nối tiếp khó điều khiển các thiết bị ngoại vi khác, do
đó phải sử dụng các thiết bị điều khiển khác để điều khiển các thiết bị ngoại
vi.

Tương tác giữa CPU và I/O


• 2 vấn đề cần quan tâm
– Truyền dữ liệu (data transfer)
– Đồng bộ (Timing or Synchronization)
• Vấn đề truyền dữ liệu
– Các thanh ghi của I/O port đóng vai trò chủ đạo
– Dữ liệu tại các ngõ vào I/O port có thể được đệm (buffered) hoặc được chốt
(latched) (dùng DFF, giải thích?)
– Dữ liệu tại ngõ ra I/O port thường được chốt (latched)
• Vấn đề đồng bộ (Timing)
– Thiết bị ngoại vi dùng một cờ (flag) để báo trạng thái sẵn sàng nhận hoặc truyền
dữ liệu
– 2 cơ chế: Polling (hỏi vòng) và Interrupt (Ngắt)
• Kiến trúc và hoạt động của CPU có liên quan mật thiết đến
– Cách thức tổ chức các lệnh trong Tập lệnh (Instruction Set)
– cách thức các lệnh truy cập đến các toán hạng dữ liệu (Các chế độ địa chỉ -
Addressing Modes)
• Phần này tập trung vào các thành phần phần mềm của CPU, cụ thể là lệnh
(instruction) và chế độ địa chỉ (Addressing mode).
+ Register Transfer Notation (RTN)
• Người lập trình không quan tâm đến chi tiết phần cứng CPU/MCU
• Người lập trình cần biết cách thức các lệnh/phép toán hoạt động, cũng như cách
thức dữ liệu (data) di chuyển trong mỗi lệnh
• Cần một quy ước trong biểu diễn các lệnh/phép toán
• Dùng left-hand Register Transfer Notation
Destination <= source
• Quy ước khác “right-hand notation”: source => destination (tuy nhiên không
dùng trong học phần này)
+ Ngôn ngữ máy và Hợp ngữ
• Ngôn ngữ máy (Machine Language)
– Mỗi chu kỳ lệnh bắt đầu bằng hoạt động fetch một từ lênh (instruction word) từ
bộ nhớ vào thanh ghi lệnh (IR)
– Một lệnh có thể gồm nhiều từ (word), nhưng chỉ có từ đầu tiên là từ lệnh; lệnh
nhiều từ có thể cần nhiều hơn 1 chu kỳ máy để thực thi
– Các lệnh được lưu trong bộ nhớ (memory) và được nạp vào các thanh ghi, do
vậy ta nói các lệnh được mã hóa (encoded) bằng ngôn ngữ máy (machine
language)
• Hợp ngữ (Assembly)
– Để tránh phải dùng ngôn ngữ máy (biểu diễn ở dạng nhị phân hoặc
hexadecimal) trong lập trình cho CPU, người ta dùng hợp ngữ
– Một lệnh hợp ngữ tương ứng với một lệnh trong ngôn ngữ máy, nhưng ở dạng
biểu diễn gần với ngôn ngữ mang tính gợi nhớ của con người
– Ngoài ra còn có các ngôn ngữ bậc cao hơn hợp ngữ và được sử dụng phổ biến
ngày nay: C/C++, Java, Python, etc.
+ Types of Instructions
• Data transfer instructions (Các lệnh di chuyển dữ liệu)
• Arithmetic-Logic instructions (Các lệnh số học và logic)
• Program control instructions (Các lệnh điều khiển luồng chương trình)
+ Các lệnh di chuyển dữ liệu
• move/load: dest <= src
• swap: dest  src
• push và pop: liên quan đến stack và subroutines
• Port operations: in và out
• Trong các CPU dựa trên kiến trúc load-store trước đây, các lệnh di chuyển dữ
liệu thường có liên quan đến một thanh ghi đặc biệt là thanh ghi tích lũy (thanh ghi
tổng) accumulator
+ Các lệnh số học và logic
• Mô hình chung ( là phép toán)
destination ← (DestinationOperand  SourceOperand)
• Các phép toán so sánh và kiểm tra
• Các phép toán quay (rotate) và dịch (shift)
• Các phép toán tác động trên bit (bitwise operations)
+ Các lệnh điều khiển luồng chương trình (1)
• Dùng để thay đổi luồng thực hiện chương trình mặc định
• Unconditional Jump (Nhảy không điều kiện) PC <= NewAddress
• Conditional Jump (Nhảy có điều kiện): thanh ghi PC trỏ đến địa chỉ mới nếu
điều kiện đúng “If flag X = n, then PC ← New Address”
• Lệnh jnz thường được dùng để tạo trễ hoặc vòng lặp
• Subroutine Calls and Returns (Gọi chương trình con và trở về từ chương trình
con):
– Chương trình chính đang thực hiện được tạm dừng, các giá trị thanh ghi và trạng
thái chương trình sẽ được lưu vào vùng nhớ stack
– Luồng chương trình được chuyển đến một vùng bộ nhớ nằm ngoài vùng nhớ
chương trình chính, tại đây có chứa mã lệnh chương trình con (subroutines),
chương trình con được thực thi tại vùng nhớ này
– Cho đến khi gặp một lệnh đặc biệt (ret) sẽ kết thúc chương trình con và luồng
chương trình quay trở về tiếp tục thực hiện chương trình chính tại vị trí tạm dừng
– Có 2 loại chương trình con: chương trình con thông thường (hàm) và chương
trình con xử lý ngắt (ISR)
+ Stack và Stack Pointer (SP)
• Stack (Ngăn xếp) là một vùng nhớ (bay hơi) đặc biệt được dùng để lưu trữ dữ
liệu tạm thời trong quá trình gọi các chương trình con (subroutine)
• Stack hoạt động theo nguyên lý LIFO (Last-In-First-Out): vào-saura-trước: dữ
liệu được ghi vào sau cùng sẽ được đọc ra đầu tiên (giống như việc xếp chồng đĩa:
đĩa được xếp vào sau cùng sẽ được lấy ra đầu tiên)
• 2 hoạt động liên quan đến stack: push và pop
• push: ghi dữ liệu từ thanh ghi vào stack
• pop: đọc dữ liệu từ stack vào thanh ghi
• Địa chỉ để ghi (push) và đọc (pop) dữ liệu được quản lý bởi một thanh ghi đặc
biệt là thanh ghi SP (Stack Pointer: con trỏ ngăn xếp)  Any stack transaction
makes implicit use of the SP
+ Đặc điểm của Stack
Đặc điểm của ngăn xếp
• Trong hầu hết các kiến trúc MCU, ngăn xếp được xác định bởi người dùng hoặc
trình biên dịch, và ngăn xếp thường phát triển xuống dưới
• => Nội dung SP giảm dần (giảm dần) mỗi khi có mặt hàng mớiđẩy vào ngăn xếp
và tăng lên khi một mục được kéo
• => nội dung của SP thường được gọi là Top-of-stack (TOS)
+ Stack và Subroutines
• Người dùng có thể thực hiện các hoạt động push và pop
• Hoạt động push và pop có thể được thực hiện (không do người dùng) khi các
chương trình con và chương trình con xử lý ngắt (ISR: Interrupt Service Routine)
được gọi
• Trong các chương trình con (bao gồm cả ISR): nội dung thanh ghi lệnh PC được
lưu vào stack bằng hoạt động “push” và được khôi phục từ stack từ hoạt động
“pop”
+ Các loại ngắt
• Maskable Interrupt Requests ( Yêu cầu ngắt che được): Là loại yêu cầu có thể
được che dấu có nghĩa là chúng có thể bị vô hiệu hóa bằng cách xóa ngắt toàn cầu
của CPU cờ kích hoạt (GIE) trong từ trạng thái bộ xử lý (PSW). Khi GIE rõ ràng,
CPU sẽ không tôn trọng bất kỳ yêu cầu ngắt có thể che giấu nào. Điều này mang
lại cho người lập trình một khả năng quyết định khi nào CPU chấp nhận hoặc
không ngắt các yêu cầu. có thể đeo mặt nạ ngắt là loại ngắt phổ biến nhất được
quản lý trong các hệ thống nhúng. TRONG hầu hết các trường hợp chúng được gọi
đơn giản là ngắt.
• Non-maskable Interrupt Requests (NMI) (Yêu cầu ngắt không che được): Không
thể được che dấu bằng cách xóa GIE trong CPU và do đó luôn được phục vụ khi
họ đến CPU. Loại yêu cầu ngắt này được dành riêng cho hệ thống quan trọng các
sự kiện hơn là không thể được thực hiện để chờ đợi. Chúng tôi sẽ gọi chúng là
NMI.
+ Các bước ngắt xử lý
• Bước 1 Kết thúc lệnh đang được thực hiện. CPU không bao giờ cắt ngắn các
lệnh. Các yêu cầu ngắt luôn được phục vụ giữa các lệnh.
• Bước 2 Lưu giá trị bộ đếm chương trình (PC) hiện tại và, trong hầu hết các CPU,
trạng thái thanh ghi (SR), vào ngăn xếp. Một số bộ xử lý cũng có thể lưu các thanh
ghi khác.
• Bước 3 Xóa cờ cho phép ngắt toàn cầu. Hành động này, được thực hiện bởi hầu
hết các CPU, vô hiệu hóa việc làm gián đoạn ISR đang được thực thi. Điều kiện
này có thể được ghi đè, nhưng thường không được khuyến khích.
• Bước 4 Tải bộ đếm chương trình (PC) với địa chỉ của ISR sẽ được thực thi.
Cách thực hiện bước này thay đổi theo kiểu xử lý ngắt, nhưng kết quả ròng luôn
giống nhau: truy cập vào PC địa chỉ của lệnh đầu tiên của ISR sẽ được thực thi.
• Bước 5 Thực thi ISR tương ứng. ISR kết thúc khi lệnh đặc biệt trả về ngắt (IRET
hoặc RETI) được thực thi.
• Bước 6 Khôi phục bộ đếm chương trình và bất kỳ thanh ghi nào khác được tự
động được lưu vào ngăn xếp ở Bước 2. Hành động này là kết quả của việc thực
hiện ngắt hướng dẫn trở lại. Lưu ý rằng bằng cách khôi phục thanh ghi trạng thái,
các ngắt trở thành vạch mặt. Khôi phục PC sẽ tiếp tục lại chương trình bị gián đoạn
ở bước tiếp theo hướng dẫn nơi nó đã được để lại.
Chương 3
+ Bộ xử lý dựa trên ARM
ARM: Máy RISC tiên tiến
-Kiến trúc ARM là một tập hợp các thông số kỹ
thuật liên quan đến tập lệnh, mô hình thực thi, tổ chức
và bố cục bộ nhớ, chu kỳ lệnh, v.v., mô tả chính xác
máy sẽ triển khai kiến trúc nói trên.
- Nếu trình biên dịch của bạn có thể tạo các hướng dẫn lắp ráp
cho kiến trúc đó, thì nó có thể tạo mã máy cho tất cả các máy thực
(hay còn gọi là bộ xử lý) đang triển khai kiến trúc đã cho đó.
+ Bộ xử lý ARM Cortex-M
-Cortex-M là một họ các lõi vật lý được thiết kế để tích hợp thêm với
các thiết bị silicon dành riêng cho nhà cung cấp để tạo thành một bộ vi điều
khiển hoàn chỉnh.
-Cách thức hoạt động của một lõi không chỉ được xác định bởi kiến trúc
ARM liên quan của nó (ví dụ: ARMv7-M), mà còn bởi các thiết bị ngoại vi và
khả năng phần cứng tích hợp
-Ví dụ: kiến trúc lõi Cortex-M4 được thiết kế để hỗ trợ các hoạt động truy
cập dữ liệu bit trong hai vùng bộ nhớ cụ thể bằng cách sử dụng một
tính năng gọi là dải bit, nhưng việc triển khai thực tế có thêm tính năng đó
hay không là tùy thuộc vào quá trình triển khai thực tế. STM32F4 là
một họ MCU dựa trên lõi Cortex-M4 thực hiện tính năng dải bit này.
+Bộ xử lý ARM Cortex-M
Cortex-A:
-Ứng dụng, thiết bị di động (điện thoại & máy tính bảng), có HĐH (Linux)
-Cortex-A7 & Cortex-A9 (32-bit); Cortex-A53 & Cortex-A57 (64-bit)
Cortex-R:
-Giải pháp điện toán thời gian thực, hiệu suất cao
Cortex-M:
-eMbedded
-bộ xử lý có thể mở rộng, tương thích, tiết kiệm năng lượng và dễ sử dụng
được thiết kế cho thị trường nhúng chi phí thấp
- IoT, kết nối, điều khiển động cơ, đo lường thông minh, thiết bị
giao diện con người, hệ thống điều khiển ô tô và công nghiệp,
thiết bị gia dụng, sản phẩm tiêu dùng và dụng cụ y tế
+Tại sao lại là bộ xử lý ARM Cortex-M?
Đó là một bộ xử lý nhúng được sử dụng trong hầu hết các Vi điều
khiển ngày nay, cũng như được sử dụng trong nhiều ứng dụng nhúng
Các thiết bị chạy bằng pin như ứng dụng theo dõi sức khỏe và theo dõi hoạt
động thể chất, máy đo y tế, v.v.
Ứng dụng ô tô.
vạn vật
Thiết bị di động và gia dụng
Trang chủ/Tự động hóa tòa nhà
Đồ chơi và Sản phẩm tiêu dùng
PC và phụ kiện di động
Thiết bị kiểm tra và đo lường
Hầu hết các bộ vi điều khiển của các nhà sản xuất MCU nổi tiếng dựa trên bộ xử lý
ARM Cortex M sản xuất
TI (ứng dụng dựa trên pin năng lượng thấp
STMicroelectronics (MCU hiệu suất cao + trung bình + thấp)
Toshiba (Thiết bị đo lường + đo sáng)
NXP
vi mạch
Broadcom (IoT, Kết nối không dây)
Và nhiều...
-Hầu hết các nhà sản xuất thích sử dụng bộ xử lý ARM Cortex M trong thiết kế của
họ vì chi phí tối thiểu, năng lượng tối thiểu và diện tích silicon tối thiểu
-Đó là bộ xử lý 32 bit, chắc chắn sẽ tăng hiệu suất tính toán của ứng dụng và nó có
mức giá gần như tương đương với bộ xử lý truyền thống 8 bit hoặc 16 bit
-Bạn có thể sử dụng MCU dựa trên bộ xử lý này trong các ứng dụng dựa trên
năng lượng cực thấp đến hiệu suất cao
-Bộ xử lý có thể tùy chỉnh để bao gồm bộ Dấu phẩy động, bộ DSP,MPU, v.v.
Bộ điều khiển ngắt rất mạnh và dễ sử dụng, hỗ trợ tới 240 ngắt ngoài RTOS thân
thiện ARM cung cấp rất nhiều tài liệu để tìm hiểu về bộ xử lý này
CHương 4:
+Dẫn nhập
• STM32 là một loạt các vi điều khiển (hiện) có 9 phân họ
• ST bắt đầu sản xuất ra thị trường vào năm 2007, bắt đầu với loạt vi điều khiển
STM32F1 (vẫn đang được phát triển)
• Tất cả các bộ vi điều khiển STM32 đều có lõi Cortex-M, cộng với một số tính
năng ST đặc biệt (như ARTTM Accelerator).
• Mỗi vi điều khiển bao gồm lõi bộ xử lý (processor core), RAM tĩnh, bộ nhớ
flash, giao diện gỡ lỗi (debug) và nhiều ngoại vi khác.
• Một số MCU cung cấp các loại bộ nhớ bổ sung (EEPROM, CCM, v.v.) và toàn
bộ dòng thiết bị nhắm đến các ứng dụng năng lượng thấp vẫn đang tiếp tục phát
triển.
+ ưu điểm
• MCU dựa trên Cortex-M
• Chuỗi công cụ dựa trên ARM miễn phí
• Tái sử dụng bí quyết
• Tương thích pin-to-pin
• Chịu được 5V
• 32 xu cho 32 bit
• Bộ nạp khởi động tích hợp
+ nhược điểm
• Đường cong học tập dốc
• Thiếu công cụ chính thức
• Tài liệu rời rạc & phân tán
• Lỗi HAL (Lớp trừu tượng phần cứng)
• Thiếu MCU cho IoT
+ Tool-Chain for STM32
• Tool-Chain (chuỗi công cụ) là một tập hợp các chương trình, trình biên dịch và
công cụ cho phép:
– viết mã và điều hướng bên trong các tệp nguồn của ứng dụng;
– điều hướng bên trong mã ứng dụng, kiểm tra biến, định nghĩa/khai báo hàm, v.v.
– biên dịch mã nguồn bằng trình biên dịch đa nền tảng (cross-platform compiler);
– tải chương trình (download) và gỡ lỗi (debug) ứng dụng chạy trên board mạch
phát triển
• Để thực hiện các hoạt động này, về cơ bản cần có:
– một IDE tích hợp trình soạn thảo và điều hướng chương trình nguồn;
– trình biên dịch đa nền tảng (cross-platform compiler) có thể biên dịch mã nguồn
cho ARM Cortex-M;
– trình gỡ lỗi (debugger) cho phép thực hiện từng bước gỡ lỗi phần sụn (firmware)
trên board mạch phát triển;
– một công cụ cho phép tương tác với trình gỡ lỗi phần cứng tích hợp: ST-LINK
Interface hoặc JTAG adapte
CHương 6:
Các tính năng chính của GPIO (1)
• Tối đa 16 I/O được kiểm soát (tối đa 16 chân I/O mỗi cổng)
• Trạng thái đầu ra: đẩy-kéo hoặc mở cống + kéo lên/xuống
• Dữ liệu đầu ra từ thanh ghi dữ liệu đầu ra (GPIOx_ODR) hoặc thiết bị ngoại vi
(đầu ra chức năng thay thế)
• Lựa chọn tốc độ cho từng I/O
• Trạng thái đầu vào: floating, pull-up/down, analog
• Nhập dữ liệu vào thanh ghi dữ liệu đầu vào (GPIOx_IDR) hoặc thiết bị ngoại vi
(đầu vào chức năng thay thế)
Thanh ghi thiết lập và đặt lại bit (GPIOx_BSRR) cho bitwise ghi quyền truy cập
vào GPIOx_ODR
• Cơ chế khóa (GPIOx_LCKR) được cung cấp để đóng băng cấu hình I/O Chức
năng analog
• Các thanh ghi lựa chọn đầu vào/đầu ra chức năng luân phiên (tại hầu hết 16 AF
trên mỗi I/O)
• Chuyển đổi nhanh có khả năng thay đổi sau mỗi hai chu kỳ đồng hồ
• Ghép chân linh hoạt cao cho phép sử dụng các chân I/O dưới dạng GPIO hoặc là
một trong một số chức năng ngoại vi
+ Mô tả chức năng GPIO
Tùy thuộc vào các đặc điểm phần cứng cụ thể của từng cổng I/O được liệt kê trong
bảng dữ liệu, mỗi bit cổng của các cổng I/O (GPIO) đa năng có thể được cấu hình
riêng bằng phần mềm ở một số chế độ:
• Input floating (nhập vào thả nổi)
• Input pull-up (nhập vào kéo lên)
• Input-pull-down (nhập vào kéo xuống)
• Analog (nhập vào tín hiệu tương tự)
• Đầu ra cống hở với khả năng kéo lên hoặc kéo xuống (ngõ ra cực rãnh hở with
pull up or pull down)
• Đầu ra push-pull với khả năng pull-up hoặc pull-down (ngõ ra đưa-kéo với pull
up or pull down)
• Chức năng thay thế đẩy-kéo với khả năng kéo lên hoặc kéo xuống
• Thay thế chức năng mở cống với khả năng kéo lên hoặc kéo xuống
+ Trình xử lý HAL_GPIO
• HAL = Lớp trừu tượng hóa phần cứng
• Mỗi khi chúng ta cần cấu hình thiết bị ngoại vi sử dụng chân MCU, chúng ta cần
định cấu hình các GPIO tương ứng của nó bằng HAL_GPIO mô-đun.
• HAL được thiết kế sao cho nó trừu tượng hóa từ thiết bị ngoại vi cụ thể lập bản
đồ bộ nhớ. Tuy nhiên, nó cũng cung cấp một cách chung và thân thiện hơn với
người dùng để định cấu hình thiết bị ngoại vi mà không buộc lập trình viên đến bây
giờ làm thế nào để cấu hình các thanh ghi của nó một cách chi tiết.
+ GPIO registers (các thanh ghi liên quan GPIO)
• Các thanh ghi điều khiển cổng I/O (các thanh ghi điều khiển)
– Mỗi GPIO có bốn thanh ghi điều khiển ánh xạ bộ nhớ 32 bit (GPIOx_MODER,
GPIOx_OTYPER, GPIOx_OSPEEDR, GPIOx_PUPDR) để định cấu hình tối đa
16 I/O.
– Thanh ghi GPIOx_MODER được sử dụng để chọn hướng I/O (đầu vào, đầu ra,
AF, tương tự).
– Các thanh ghi GPIOx_OTYPER và GPIOx_OSPEEDR được sử dụng để chọn
loại đầu ra
(push-pull hoặc open-drain) và tốc độ (các chân tốc độ I/O được kết nối trực tiếp
với các bit thanh ghi GPIOx_OSPEEDR tương ứng bất kể hướng I/O).
– Thanh ghi GPIOx_PUPDR được sử dụng để chọn kéo lên/kéo xuống bất kể I/O
phương hướng.
• Các thanh ghi dữ liệu cổng I/O (các thanh ghi dữ liệu)
– Mỗi GPIO có hai thanh ghi dữ liệu ánh xạ bộ nhớ 16 bit: thanh ghi dữ liệu đầu
vào và đầu ra (GPIOx_IDR và GPIOx_ODR). GPIOx_ODR lưu trữ dữ liệu được
xuất ra, nó được đọc/ghi có thể truy cập. Dữ liệu đầu vào thông qua I/O được lưu
vào thanh ghi dữ liệu đầu vào (GPIOx_IDR), thanh ghi chỉ đọc.
• Xử lý bit dữ liệu I/O
– Thanh ghi thiết lập lại bộ bit (GPIOx_BSRR) là thanh ghi 32 bit cho phép ứng
dụng đặt và đặt lại từng bit riêng lẻ trong thanh ghi dữ liệu đầu ra (GPIOx_ODR).
Thiết lập lại bit thanh ghi có kích thước gấp đôi GPIOx_ODR.
+ GPIO_MODE_INPUT
– Bộ đệm đầu ra bị tắt.
– Đầu vào kích hoạt Schmitt được kích hoạt.
– Các điện trở kéo lên và kéo xuống được kích hoạt tùy thuộc vào giá trị của
trường Kéo.
– Dữ liệu có trên chân I/O được lấy mẫu vào thanh ghi dữ liệu đầu vào sau mỗi chu
kỳ xung nhịp AHB.
– Quyền truy cập đọc vào thanh ghi dữ liệu đầu vào cung cấp trạng thái I/O.
+ GPIO_MODE_ANALOG
– Bộ đệm đầu ra bị tắt.
– Đầu vào kích hoạt Schmitt bị hủy kích hoạt, cung cấp mức tiêu thụ bằng 0 cho
mọi giá trị analog của chân I/O.
– Điện trở pull-up và pull-down yếu do phần cứng vô hiệu hóa.
– Đọc quyền truy cập vào thanh ghi dữ liệu đầu vào nhận giá trị 0
+ GPIO_MODE_OUTPUT
– Bộ đệm đầu ra được kích hoạt như sau:
• nếu chế độ là GPIO_MODE_OUTPUT_OD: A 0 trong thanh ghi đầu ra (ODR)
kích hoạt N-MOS trong khi 1 rời khỏi cổng ở Hi-Z (P-MOS là không bao giờ được
kích hoạt);
• nếu chế độ là GPIO_MODE_OUTPUT_PP: 0 trong ODR kích hoạt N-MOS
trong khi 1 kích hoạt P-MOS.
– Đầu vào kích hoạt Schmitt được kích hoạt.
– Các điện trở pull-up và pull-down được kích hoạt tùy thuộc vào giá trị của
trường Kéo.
– Dữ liệu có trên chân I/O được lấy mẫu vào thanh ghi dữ liệu đầu vào
mỗi chu kỳ đồng hồ AHB.
– Quyền truy cập đọc vào thanh ghi dữ liệu đầu vào có trạng thái I/O.
– Quyền truy cập đọc vào thanh ghi dữ liệu đầu ra sẽ nhận giá trị được ghi cuối
cùng.
+GPIO_MODE_AF (Chức năng thay thế)
– Bộ đệm đầu ra được kích hoạt như sau:
• nếu chế độ là GPIO_MODE_OUTPUT_OD: A 0 trong thanh ghi đầu ra (ODR)
kích hoạt N-MOS trong khi 1 rời khỏi cổng ở Hi-Z (P-MOS là không bao giờ được
kích hoạt);
• nếu chế độ là GPIO_MODE_OUTPUT_PP: 0 trong ODR kích hoạt N-MOS
trong khi 1 kích hoạt P-MOS.
– Đầu vào kích hoạt Schmitt được kích hoạt.
– Các điện trở pull-up và pull-down được kích hoạt tùy thuộc vào
giá trị của trường Kéo.
– Dữ liệu có trên chân I/O được lấy mẫu vào thanh ghi dữ liệu đầu vào
mỗi chu kỳ đồng hồ AHB.
– Quyền truy cập đọc vào thanh ghi dữ liệu đầu vào có trạng thái I/O.
– Quyền truy cập đọc vào thanh ghi dữ liệu đầu ra sẽ nhận giá trị được ghi cuối
cùng.
• Các chế độ GPIO GPIO_MODE_EVT_* có liên quan đến các chế độ ngủ. Khi
một I/O được cấu hình để hoạt động ở một trong các chế độ này, CPU sẽ được
đánh thức lên (khi được đặt ở chế độ ngủ với lệnh WFE) nếu tương ứngI/O được
kích hoạt mà không tạo ra ngắt tương ứng.
• Các chế độ GPIO Các chế độ GPIO_MODE_IT_* có liên quan đến các ngắt
quản lý
+ Trình xử lý HAL để điều khiển GPIO
• Kích hoạt đồng hồ cổng GPIO
__HAL_RCC_GPIOx_CLK_ENABLE();
• Khởi tạo GPIO
HAL_GPIO_Init (GPIOx, &GPIO_InitStruct)
• Đọc trạng thái của một I/O
HAL_GPIO_ReadPin (GPIOx, GPIO_Pin)
• Viết một I/O
HAL_GPIO_WritePin (GPIOx, GPIO_Pin, PinState)
• Đảo ngược trạng thái I/O
HAL_GPIO_TogglePin (GPIOx, GPIO_Pin)
• Khóa cấu hình
HAL_GPIO_LockPin (GPIOx, GPIO_Pin)
• Khởi tạo lại GPIO
HAL_GPIO_DeInit (GPIOx, GPIO_Pin)
**Lưu ý: GPIOx có trong {GPIOA, GPIOB, GPIOC, GPIOD, GPIOE, GPIOH}
Chương 7
+Interrupt Management Overview (Tổng quan về quản lý ngắt)
• Các vi điều khiển cung cấp một tính năng gọi là ngắt (Interrupt).
• Ngắt là một sự kiện không đồng bộ gây ra việc dừng thực thi mã lệnh hiện tại
trên cơ sở ưu tiên: – ngắt càng quan trọng thì mức độ ưu tiên càng cao;
– ngắt có mức ưu tiên thấp hơn bị tạm dừng.
• Mã lệnh phục vụ ngắt được gọi là Chương trình con phục vụ ngắt Interrupt
Service Routine (ISR).
+Interrupts & Multi-Programming
• Ngắt là một nguồn của lập trình đa nhiệm: phần cứng biết về các ngắt và có trách
nhiệm lưu bối cảnh thực thi hiện tại (ngăn xếp, Bộ đếm chương trình hiện tại và
một số thứ khác) trước khi chuyển sang ISR.
• Ngắt được khai thác bởi Hệ điều hành thời gian thực (Real Time Operating
Systems - RTOS) để giới thiệu khái niệm về các tác vụ (Task).
• Với sự trợ giúp của phần cứng có thể thực hiện một hệ thống xử lý ưu tiên (pre-
emptive system), cho phép chuyển đổi giữa một số bối cảnh thực hiện mà không
làm mất đi luồng thực thi hiện tại.
+Interrupts in ARM
• Interrupts can originate both by the hardware and the software itself. → ngắt có
thể được phát sinh bởi phần cứng và phần mềm
• ARM architecture distinguishes between the two types:
– interrupts (ngắt) originate by the hardware,
– exceptions (ngoại lệ) by the software (e.g., an access to invalid memory
location).
• In ARM terminology, an interrupt is a type of exception.
+Enabling Interrupts
• When an STM32 MCU boots up, only Reset, NMI and Hard Fault exceptions are
enabled by default.
• The rest of exceptions and peripheral interrupts are disabled, and they have to be
enabled on request.
• To enable an IRQ, the CubeHAL provides the following function:

• The corresponding function to disable an IRQ:

+STM32F411: EXTI main features


• The main features of the EXTI controller are the following:
– independent trigger and mask on each interrupt/event line (kích hoạt độc lập và
cấm ngắt trên mỗi nguồn ngắt/sự kiện)
– dedicated status bit for each interrupt line (có bit trạng thái riêng biệt cho mỗi
đường ngắt)
– generation of up to 23 software event/interrupt requests (có đến 23 sự kiện/ngắt)
– detection of external signals with a pulse width lower than the APB2 clock
period (phát hiện tín hiệu ngoài với độ rộng xung nhỏ hơn chu kỳ xung của bus
APB2)
+STM32F103: EXTI main features
• The main features of the EXTI controller are the following:
– independent trigger and mask on each interrupt/event line (kích hoạt độc lập và
cấm ngắt trên mỗi nguồn ngắt/sự kiện)
– dedicated status bit for each interrupt line (có bit trạng thái riêng biệt cho mỗi
đường ngắt)
– generation of up to 20 software event/interrupt requests (có đến 20 sự kiện/ngắt)
– detection of external signals with a pulse width lower than the APB2 clockperiod
(phát hiện tín hiệu ngoài với độ rộng xung nhỏ hơn chu kỳ xung của bus APB2)
+STM32F411 Dòng EXTI và NVIC
Mối quan hệ giữa các dòng GPIO, EXTI và ISR tương ứng trong MCU STM32F4
• Hình minh họa các dòng EXTI 0, 10 và 15 trong MCU STM32F4.
• Tất cả các chân Px0 được kết nối với EXTI0, tất cả các chân Px10 được kết nối
với EXTI10 và tất cả các chân Px15 được kết nối với EXTI15.
• Tuy nhiên, EXTI dòng 10 và 15 chia sẻ cùng một IRQ bên trong NVIC (và do đó
được phục vụ bởi cùng một ISR).
• Chỉ một chân PxY có thể là một nguồn ngắt. Ví dụ, chúng ta không thể xác định
cả PA0 và PB0 làm chân ngắt đầu vào.
• Đối với các dòng EXTI dùng chung IRQ bên trong bộ điều khiển NVIC, chúng ta
phải mã ISR tương ứng để chúng tôi phải có khả năng phân biệt những dòng nào
tạo ra ngắt.
Chương 8:
+Vòng đời gián đoạn
• Một ngắt có thể ở một trong các trạng thái sau:
– đã tắt (hành vi mặc định) hoặc đã bật:
HAL_NVIC_EnableIRQ() / HAL_NVIC_DisableIRQ()
– đang chờ xử lý (một yêu cầu đang chờ được phục vụ) hay không
chưa giải quyết;
- trạng thái hoạt động (đang được phục vụ) hoặc không hoạt động
+ Ví dụ về Vòng đời gián đoạn (1)
• Ngắt A kích hoạt tại thời điểm t0 và do CPU không phục vụ ngắt khác ngắt, bit
đang chờ của nó bị xóa và quá trình thực thi của nó bắt đầu ngay lập tức⁸ (ngắt sẽ
hoạt động).
• Tại thời điểm t1, ngắt B kích hoạt, nhưng ở đây chúng ta giả sử rằng ngắt B ngắt
có mức ưu tiên thấp hơn A. Vì vậy, nó được để ở trạng thái chờ cho đến khi A ISR
kết thúc hoạt động của nó. Khi điều này xảy ra, bit đang chờ xử lý là tự động bị
xóa và ISR trở nên hoạt động.
Chương 9

+ sử dụng điển hình


(Các trường hợp sử dụng từ điển hình)
• trình tạo cơ sở thời gian
• đo tần số của một sự kiện bên ngoài (chế độ chụp đầu vào)
• kiểm soát một dạng sóng đầu ra, hoặc để chỉ ra khi một khoảng thời gian đã
trôi qua (chế độ so sánh đầu ra)
– Chế độ một xung (OPM) là một trường hợp cụ thể của chế độ chụp đầu vào và
chế độ so sánh đầu ra. Nó cho phép bộ đếm được bắt đầu để đáp ứng với một kích
thích và để tạo xung với độ dài có thể lập trình sau một độ trễ lập trình được.
• tạo tín hiệu PWM ở chế độ căn chỉnh theo cạnh hoặc căn giữa chế độ độc lập trên
mỗi kênh (chế độ PWM)
– Trong một số MCU STM32 (đặc biệt là từ STM32F3 và dòng STM32L4 gần
đây), một số bộ hẹn giờ có thể tạo tín hiệu PWM được căn chỉnh ở giữa với một bộ
định thời có thể lập trình trễ và lệch pha
+ Hẹn giờ với ngắt & DMA
Tùy thuộc vào loại bộ hẹn giờ, bộ hẹn giờ có thể tạo Ngắt hoặc DMA
yêu cầu khi các sự kiện sau đây xảy ra:
• Cập nhật sự kiện
– Bộ đếm tràn/tràn
– Khởi tạo bộ đếm
- Người khác
• Cò súng
– Khởi động/dừng bộ đếm
– Khởi tạo bộ đếm
- Người khác
• Chụp đầu vào/So sánh đầu ra
+ Danh mục hẹn giờ trong MCU STM32
• Bộ hẹn giờ cơ bản
• Bộ hẹn giờ mục đích chung
• Hẹn giờ nâng cao
• Bộ hẹn giờ độ phân giải cao
• Bộ hẹn giờ công suất thấp
• STM32F411 (xem Reference Manual - RM)
- Hẹn giờ mục đích chung
• TIM2 đến TIM5: 16-bit hoặc 32-bit (Chương 13 - RM)
• TIM9 đến TIM11: 16-bit (Chương 14 - RM)
– Hẹn giờ điều khiển nâng cao: TIM1 (bộ đếm 16-bit) (Chương 12 - RM)
Chương 10
+ Nó khá phổ biến để giao tiếp các thiết bị ngoại vi tương tự với một vi điều khiển:
– Cảm biến (Các biến cảm biến),
– Chiết áp (Các biến trở)
– Transducers (Các bộ chuyển đổi)
– Thiết bị ngoại vi âm thanh (Thiết bị ngoại vi âm thanh)
- vân vân.
• Các thiết bị tương tự này tạo ra điện áp thay đổi, thường dao động trong một
khoảng cố định
• Bằng cách đọc điện áp này, chúng ta có thể chuyển đổi nó dưới dạng số thực thể
hữu ích để được xử lý bởi chương trình cơ sở của chúng tôi.
• Tất cả các bộ vi điều khiển STM32 đều cung cấp ít nhất một Bộ chuyển đổi
tương tự sang kỹ thuật số (ADC), một thiết bị ngoại vi có thể thu được một số điện
áp đầu vào thông qua I/O chuyên dụng và để chuyển đổi chúng thành một số.
• Điện áp đầu vào được so sánh với điện áp đã biết và điện áp cố định, còn được
gọi là điện áp tham chiếu.
• Điện áp tham chiếu này có thể được lấy từ Tên miền VDDA hoặc, trong các
MCU có số lượng pin cao, được cung cấp bởi một máy phát điện áp tham chiếu
bên ngoài và cố định (những MCU đó cung cấp một chân chuyên dụng có tên
VREF+).
• Phần lớn các MCU STM32 cung cấp ADC 12-bit.
• Một số trong số chúng từ danh mục đầu tư STM32F3 thậm chí là 16-bit
ADC
• Hầu hết các bộ vi điều khiển STM32, ADC được triển khai dưới dạng 12-bit
Đăng ký xấp xỉ liên tiếp ADC
• Tùy thuộc vào loại bán hàng và đóng gói được sử dụng, nó có thể có số lượng
kênh đầu vào đa kênh có thể thay đổi (thường là nhiều hơn mười kênh trong hầu
hết các MCU STM32), cho phép đo tín hiệu từ các nguồn bên ngoài.
• Ngoài ra còn có một số kênh nội bộ:
– cảm biến nhiệt độ bên trong (VSENSE),
– điện áp tham chiếu bên trong (VREF INT),
– một kênh để theo dõi nguồn điện VBAT bên ngoài
– một kênh để theo dõi điện áp LCD
+ Features of SAR ADC
• Các chế độ chuyển đổi: đơn, liên tục, quét hoặc không liên tục
• Kết quả của ADC: dữ liệu 16 bit căn trái hoặc căn phải đăng ký
• Tính năng giám sát tương tự: phát hiện nếu điện áp đầu vào tăng nằm ngoài
ngưỡng cao hơn hoặc thấp hơn do người dùng xác định: nếu điều này xảy ra,
lửa IRQ chuyên dụng
Hình 2 cho thấy các khối chính tạo thành đơn vị SAR ADC như trong Hình 1. Tín
hiệu đầu vào đi qua đơn vị SHA. Như bạn có thể thấy trong Hình 1, một công tắc
và một tụ điện mắc nối tiếp với đầu vào ADC. Phần đó đại diện cho đơn vị Lấy
mẫu và Giữ (SHA) được hiển thị trong Hình 2, đây là một tính năng có sẵn trong
tất cả các ADC. Bộ phận này đóng vai trò quan trọng để giữ cho tín hiệu đầu vào
không đổi trong chu kỳ chuyển đổi. Nhờ có một bộ định thời bên trong, được điều
chỉnh bởi một đồng hồ có thể định cấu hình như chúng ta sẽ thấy sau này, SAR liên
tục kết nối/ngắt kết nối nguồn đầu vào bằng cách đóng/mở “công tắc” trong Hình
1. Để giữ mức điện áp của đầu vào không đổi , SHA được triển khai với một mạng
lưới các tụ điện: điều này đảm bảo rằng tín hiệu nguồn được giữ ở một mức nhất
định trong quá trình chuyển đổi A/D, đây là quy trình yêu cầu một khoảng thời
gian nhất định, tùy thuộc vào tần số chuyển đổi đã chọn.
Đầu ra từ mô-đun SHA cung cấp một bộ so sánh để so sánh nó với một tín hiệu
khác do DAC bên trong tạo ra. Kết quả so sánh được gửi đến đơn vị logic, đơn vị
này tính toán biểu diễn số của tín hiệu đầu vào theo một thuật toán đặc trưng.
Thuật toán này là điểm khác biệt của SAR ADC với các bộ chuyển đổi A/D khác.

You might also like