Báo cáo giữa kỳ: Vi Điều Khiển và Ứng Dụng
Đề tài 3: INTERRUPT
Giáo viên hướng dẫn : TS.Võ Duy Thành
Nhóm: 2
Sinh viên thực hiện :
Phạm Anh Dũng
- 20181428
Phạm Quốc Huy
- 20181534
Phạm Thành Long
- 20181623
Phạm Quốc Huy
- 20173961
1 1
NỘI DUNG CHÍNH
I. TỔNG QUAN VỀ NGẮT
II. GIỚI THIỆU VỀ STM32F103C8T6
III. NGẮT NGOÀI TRÊN STM32F103C8T6
IV. THỰC HÀNH NGẮT NGOÀI TRÊN CHIP STM32F103C8T6
2 2
I. TỔNG QUAN VỀ NGẮT
Ngắt (Interrupt): là quá trình xử lý thơng tin của vi xử lý. Khi có sự kiện khẩn cấp bên trong
hoặc bên ngoài bộ vi điều khiển xảy ra, buộc CPU tạm dừng thực hiện chương trình hiện tại,
phục vụ ngay lập tức nhiệm vụ mà ngắt yêu cầu – nhiệm vụ này gọi là trình phục vụ ngắt
(ISR: Interrupt Service Routine). Sau khi kết thúc chương trình trong ngắt CPU sẽ quay trở lại vị
trí trước đó để thực hiện tiếp nhiệm vụ cịn đang dang dở.
Một số ngắt phổ biến trên vi điều khiển:
• Ngắt ngoài: Sự kiện là khi sự thay đổi sườn tín hiệu (edge) sườn lên, sườn xuống, hoặc cả 2.
• Ngắt UART: Thường sử dụng ngắt nhận, sự kiện là khi buffer nhận đủ 1 byte dữ liệu.
• Ngắt ADC: Thường sử dụng khi hồn thành việc chuyển đổi ADC.
• Ngắt Timer: Thường sử dụng khi tràn thanh ghi đếm, hoặc khi giá trị đếm bằng với thanh ghi so sánh.
3
3
I. TỔNG QUAN VỀ NGẮT
Điểm mạnh của ngắt:
• Vi điều khiển có thể phục vụ được nhiều thiết bị, thứ tự thực hiện dựa trên mức độ ưu tiên được
gán cho nó.
• Vi điều khiển có thể tạm thời ngưng việc thực thi 1 chương trình để phục vụ 1 chương trình
khác.
• Khơng lãng phí thời gian cho các thiết bị không cần phục vụ.
Ứng dụng: Ngắt giúp chương trình xử lý theo sự việc, đáp ứng được các sự kiện như sự
thay đổi mức logic từ 1 chân vi điều khiển (ngắt ngồi), nhận một kí tự (ngắt nhận UART)….
• Để khơng lãng phí thời gian của CPU.
• Để CPU thực hiện được nhiều việc cùng lúc.
• Thực hiện trao đổi thông tin với ngoại vi chậm.
4 4
I. TỔNG QUAN VỀ NGẮT
Hoạt động ngắt:
• Khi chương trình đang thực hiện câu lệnh thứ k mà gặp tín hiệu
báo ngắt thì vi xử lý sẽ thực hiện xong câu lệnh thứ k đó và kiểm
tra ngắt
• Nếu ngắt đó khơng được chấp nhận thì vi xử lý sẽ bỏ qua ngắt
đó và thực hiện câu lệnh tiếp theo.
• Nếu ngắt đó được chấp nhận thì vi xử lý sẽ tạm dừng chương
trình và xử lý ngắt. Sau khi xử lý xong chương trình ngắt thì
quay trở về thực hiện câu lệnh tiếp theo trong chương trình
chính.
5 5
I. TỔNG QUAN VỀ NGẮT
Các bước thực hiện ngắt của vi điều khiển:
• Bước 1: Thực hiện xong câu lệnh đang thực hiện (câu lệnh ở mã máy sau q trình compiler,
asembler từ ngơn ngữ bật cao do người dùng viết).
• Bước 2: Lưu địa chỉ câu lệnh tiếp theo sẽ thực hiện và lưu trạng thái năng lượng đang hoạt
động vào vùng nhớ Stack ( Quá trình stacking) .
• Bước 3: Xóa bit cho phép ngắt tồn cục trong thanh ghi trạng thái, đưa vi điều khiển về chế
độ hoạt động bình thường (active mode) nếu nó đang ở chế độ tiết kiệm năng lượng. Bit cho
phép ngắt cũng có thể được bật lên lại để cho phép ngắt chồng ngắt (Nested Interrupt).
• Bước 4: Vi điều khiển thực thi chương trình phục vụ ngắt (ISR) bằng cách nạp địa chỉ câu
lệnh đầu tiên của chương trình phục vụ ngắt vào thanh ghi PC. (Địa chỉ này cũng là địa chỉ
của vecter ngắt trong interrupt vector table)
• Bước 5: Khi thực hiện xong chương trình phục vụ ngắt, vi điều khiển sẽ thực hiện quá trình
unstacking: nạp lại giá trị thanh ghi PC đã lưu, bật lại bit cho phép ngắt toàn cục, quay về
trạng thái năng lượng ban đầu.
6 6
I. TỔNG QUAN VỀ NGẮT
Hoạt động ngắt lồng nhau:
Khi 2 ngắt xảy ra cùng 1 thời điểm, ngắt nào có mức ưu tiên cao hơn thì thực hiện trước
Khi 1 ngắt đang chạy, nếu có ngắt khác có mức độ ưu tiên cao hơn được gọi thì sẽ thực hiện ngắt ngắt.
7 7
II. GIỚI THIỆU VỀ STM32F103C8T6
Hình 1: STM32F103C8T6 Blue Pill
8 8
II. GIỚI THIỆU VỀ STM32F103C8T6
1. Giới thiệu sơ lược
• STM32 là một trong những dòng chip phổ biến của ST với nhiều họ thơng dụng như
F0,F1,F2,F3,F4…..
• STM32F103 thuộc họ F1 với lõi là ARM COTEX M3.
• STM32F103 là vi điều khiển 32 bit, tốc độ tối đa là 72Mhz.
• Giá thành của STM32F103 cũng khá rẻ so với các loại vi điều khiển có chức năng tương tự.
• Mạch nạp cũng như cơng cụ lập trình khá đa dạng và dễ sử dụng.
2. Ứng dụng
• Dùng cho driver để điều khiển ứng dụng
• Máy tính và thiết bị ngoại vi chơi game
• GPS cơ bản
• Thiết bị lập trình PLC
• Máy in, máy quét, hệ thống cảnh báo, thiết bị liên lạc nội bộ…
9 9
II. GIỚI THIỆU VỀ STM32F103C8T6
3. Một số thơng tin khác
• Phần mềm lập trình: có khá nhiều trình biên dịch cho STM32 như STM32CubeXIDE,
IAR
Embedded Workbench, Keil C…
• Thư viện lập trình: có nhiều loại thư viện lập trình cho STM32 như: STM32snippets, STM32Cube LL,
STM32Cube HAL, Standard Peripheral Libraries, Mbed core. Mỗi thư viện đều có ưu và khuyết điểm
riêng, trong đó có Standard Peripheral Libraries đã ra đời khá lâu và khá thông dụng, hỗ trợ nhiều ngoại
vi và cũng dễ hiểu rõ bản chất của lập trình.
• Mạch nạp: Có khá nhiều loại mạch nạp như : ULINK, J-LINK , CMSIS-DAP, STLINK… trong đó
có mạch nạp STLINK có giá thành khá rẻ và debug lỗi cũng tốt.
1010
II. GIỚI THIỆU VỀ STM32F103C8T6
4. Cấu hình chi tiết của STM32F103C8T6
1111
II. GIỚI THIỆU VỀ STM32F103C8T6
4. Cấu hình chi tiết của STM32F103C8T6
ARM 32-bit Cortex M3 với clock max là 72Mhz.
Bộ nhớ:
• 64 kbytes bộ nhớ Flash(bộ nhớ lập trình).
• 20kbytes SRAM.
Clock, reset và quản lý nguồn:
• Điện áp hoạt động 2.0V -> 3.6V.
• Power on reset(POR), Power down reset(PDR) và programmable voltage detector (PVD).
• Sử dụng thạch anh ngồi từ 4Mhz -> 20Mhz.
• Thạch anh nội dùng dao động RC ở mode 8Mhz hoặc 40khz.
• Sử dụng thạch anh ngoài 32.768khz được sử dụng cho RTC.
2 bộ ADC 12 bit với 9 kênh cho mỗi bộ:
• Khoảng giá trị chuyển đổi từ 0 – 3.6V.
• Lấy mẫu nhiều kênh hoặc 1 kênh.
• Có cảm biến nhiệt độ nội.
1212
II. GIỚI THIỆU VỀ STM32F103C8T6
4. Cấu hình chi tiết của STM32F103C8T6
DMA: bộ chuyển đổi này giúp tăng tốc độ xử lý do khơng có sự can thiệp q sâu của CPU.
• 7 kênh DMA.
• Hỗ trợ DMA cho ADC, I2C, SPI, UART.
7 timer:
• 3 timer 16 bit hỗ trợ các mode IC/OC/PWM.
• 1 timer 16 bit hỗ trợ để điều khiển động cơ với các mode bảo vệ như ngắt input, dead-time..
• 2 watchdog timer dùng để bảo vệ và kiểm tra lỗi.
• 1 sysTick timer 24 bit đếm xuống dùng cho các ứng dụng như hàm Delay….
Hỗ trợ 9 kênh giao tiếp bao gồm:
• 2 bộ I2C(SMBus/PMBus).
• 3 bộ USART(ISO 7816 interface, LIN, IrDA capability, modem control).
• 2 SPIs (18 Mbit/s).
• 1 bộ CAN interface (2.0B Active)
• USB 2.0 full-speed interface
1313
III. NGẮT NGOÀI TRÊN STM32F103C8T6
NVIC – Nested vectored interrupt controller: là bộ điều khiển xử lý ngắt có trong
MCU STM32F103C8T6.
Một số thơng số tính năng chính của NVIC:
• Bao gồm 68 vector ngắt (chưa gồm 16 ngắt hệ thống)
• Lập trình 16 mức ưu tiên ngắt (4 bit được sử dụng)
• Độ trễ thấp (xảy ra ngắt cực kì nhanh).
• Có quản lí năng lượng cho vector ngắt.
• Có các thanh ghi điều khiển quá trình ngắt.
1414
III. NGẮT NGỒI TRÊN STM32F103C8T6
External interrupt (EXTI) hay cịn gọi là ngắt ngoài. Là 1 sự kiện ngắt xảy ra khi có tín hiệu can
thiệp từ bên ngồi, từ phần cứng, người sử dụng hay ngoại vi,…tác động vào chân EXTI đó, tùy theo
sự kiện đó có phù hợp với điều kiện ngắt khơng thì ngắt ngồi mới xảy ra.
Ngắt ngoài nằm trong 1 phần của NVIC. Mỗi EXTI – interrupt/event controller có thể được lập
trình chọn loại sự kiện? ngắt, chọn cạnh lên, cạnh xuống hoặc cả 2, sắp xếp mức ưu tiên ngắt.
Một số tính năng chính của ngắt ngồi:
• Kích hoạt độc lập và mask cho mỗi line sự kiện/ngắt.
• Có bit trạng thái (status) riêng cho mỗi line ngắt.
• Có thể có tối đa 20 sự kiện/ ngắt.
• Kiểm tra tín hiệu ngồi có độ rộng xung nhỏ hơn clock trên APB2.
1515
III. NGẮT NGỒI TRÊN STM32F103C8T6
Hình 2: Sơ đồ khối của các khối điều khiển ngắt ngoài
1616
III. NGẮT NGỒI TRÊN STM32F103C8T6
STM32F103 có 16 line ngắt ngồi riêng biệt, ngồi ra
có 4 line ngắt đặc biệt ( từ EXTI16 đến EXTI19 tương
ứng dùng cho PVD, RTC, USB, Ethernet).
LineX sẽ chứa ngắt cho các chân PX của các Port.
Các Line0, Line1, Line2, Line3, Line4 được phân vào
các vector ngắt riêng biệt EXTI0, EXTI1, EXTI2,
EXTI3, EXTI4; từ Line5 -> Line9 được phân vào
vector ngắt EXTI9_5; từ Line10 -> Line15 được phân
vào vector ngắt EXTI15_10.
Mỗi Line chỉ cho phép có được 1 chân ngắt ngồi.
Hình 3: Sơ đồ tổ chức các Line ngắt ngoài
1717
III. NGẮT NGOÀI TRÊN STM32F103C8T6
Hoạt động ngắt ở chế độ Rising và Falling:
Ngắt ở chế độ Rising
Ngắt ở chế độ Falling
1818
III. NGẮT NGOÀI TRÊN STM32F103C8T6
Một số thanh ghi quan trọng:
1. EXTI_IMR – Interrupt mask register: Thanh ghi này cài đặt cho phép có yêu cầu ngắt trên Line tương
ứng (cho phép ngắt).
1919
III. NGẮT NGOÀI TRÊN STM32F103C8T6
2. EXTI_EMR- Event mask register: Thanh ghi này cho phép có cấu hình sự kiện trên chân tương
ứng hay chưa.
2020
III. NGẮT NGOÀI TRÊN STM32F103C8T6
3. EXTI_RTSR – Rising trigger selection register: Thanh ghi này được sử dụng để cấu hình
chọn sườn lên làm tín hiệu kích hoạt ngắt.
2121
III. NGẮT NGOÀI TRÊN STM32F103C8T6
4. EXTI_FTSR – Falling trigger selection register: Thanh ghi này được sử dụng để cấu hình
chọn sườn xuống làm tín hiệu kích hoạt ngắt.
2222
III. NGẮT NGOÀI TRÊN STM32F103C8T6
5. EXTI_SWIER – Software interrupt even register: Thanh ghi này cho phép kích hoạt Line ngắt
tương tứng bằng phần mềm.
2323
III. NGẮT NGOÀI TRÊN STM32F103C8T6
6. EXTI_PR – Pending register: Đây là thanh ghi chờ xử lý ngắt, khi có yêu cầu ngắt được tạo ra trên một
Line ngắt thì bit tương tứng của thanh ghi này được bật lên cho đến khi ngắt này được xử lý. Nhiều trước hợp
có sự thay đổi sườn tín hiệu tạo ra yêu cầu ngắt nhưng ngắt không được thực thi như: độ ưu tiên thấp, chưa
cho phép ngắt toàn cục.
2424
III. NGẮT NGOÀI TRÊN STM32F103C8T6
Bảng mức độ ưu tiên ngắt NVIC:
Có hai loại ưu tiên ngắt khác nhau trên MCU STM32F103C8T6 đó là Preemption Priorities và Sub Priorities:
• Mặc định thì ngắt nào có Preemtion Priority cao hơn thì sẽ được thực hiện trước.
• Khi nào 2 ngắt có cùng một mức Preemption Priority thì ngắt nào có Sub Priority cao hơn thì ngắt đó được thực
hiện trước.
• Cịn trường hợp 2 ngắt có cùng mức Preemption và Sub Priority ln thì ngắt nào đến trước được thực hiện
trước.
2525