1. Trang chủ
  2. » Tất cả

vi điều khiển nâng cao hoạt động ngắt

42 0 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Vi Điều Khiển Nâng Cao Hoạt Động Ngắt
Trường học University of Technology
Chuyên ngành Electrical Engineering and Electronics
Thể loại Thảo luận
Định dạng
Số trang 42
Dung lượng 2,14 MB
File đính kèm Vi dieu khien nang cao- Hoat dong ngat.rar (2 MB)

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Lập trình với ngắt ngoài GPIO (EXTI). NVIC (Nested Vectored Interrupt Controller) – bộ điều khiển vector ngắtlồng nhau: là thành phần tích hợp của bộ vi xử lý CortexM3 có khả năngxử lý ngắt rất linh hoạt và nhanh chóng. Có 68 vector ngắt 16 mức ưu tiên (từ 0 ÷ 15, mức 0 – là mức ưu tiên cao nhất) Có thể cấu hình từ 1 đến 240 ngắt vật lý với tối đa 256 mức ưutiên. Ưu tiên theo nhóm (Line), xử lý với độ trễ thấp. Quản lý năng lượng trong quá trình điều khiển ngắt Hỗ trợ Tailchaining trong phần cứng.

Trang 1

3.3 Lập trình với ngắt ngoài GPIO

(EXTI)

3.3.1 Tổ chức ngắt trên ARM STM32

Trang 2

 NVIC (Nested Vectored Interrupt Controller) – bộ điều khiển vector ngắtlồng nhau: là thành phần tích hợp của bộ vi xử lý Cortex-M3 có khả năng

xử lý ngắt rất linh hoạt và nhanh chóng

- Có 68 vector ngắt

- 16 mức ưu tiên (từ 0 ÷ 15, mức 0 – là mức ưu tiên cao nhất)

- Có thể cấu hình từ 1 đến 240 ngắt vật lý với tối đa 256 mức ưutiên

- Ưu tiên theo nhóm (Line), xử lý với độ trễ thấp

- Quản lý năng lượng trong quá trình điều khiển ngắt

- Hỗ trợ Tail-chaining trong phần cứng

3.3.1 Tổ chức ngắt trên ARM STM32

Trang 3

Push ISR 1 Pop Push ISR 2 Pop

26 Cycles 16 Cycles 26 Cycles 16 Cycles

CortexM3 Interrupts: Tail Chaining

 26 cycles from IRQ1 to ISR1

(up to 42 cycles if in LSM)

 42 cycles from ISR1 exit to ISR2 entry

 16 cycles to return from ISR2

ARM7TDMI

 12 cycles from IRQ1 to ISR1

(Interruptible/Continual LSM)

 6 cycles from ISR1 exit to ISR2 entry

 12 cycles to return from ISR2

Cortex-M3

Trang 4

Bảng Vector ngắt trên Cortex-M3

Trang 9

3.3 Lập trình với ngắt ngoài GPIO

(EXTI)

3.3.2 Ngắt ngoài GPIO (EXTI)

Trang 11

 Ngắt EXTI được thực hiện khi có nguyên nhân từ bên ngoài tác động vào chân EXTI.

 EXTI xử lý tất cả các tín hiệu yêu cầu ngắt đến từ tất cả các chân GPIO của vi điều khiển

 Có thể thiết lập tối đa 20 nguyên nhân gây ngắt

 Tín hiệu gây ngắt phải có độ rộng xung thấp hơn chu kì xung nhịp của APB2

 Kích hoạt độc lập và mask trên mỗi dòng ngắt (Line

Interrupts)

 Truy cập đến từng Bit trong mỗi dòng ngắt

3.3.2 Ngắt ngoài GPIO (EXTI)

Trang 12

3.3.2 Ngắt ngoài GPIO (EXTI)

- Tổ chức ngắt ngoài

Trang 13

 Các yêu cầu ngắt được phân thành 20 line ngắt

 16 line (0-15) từ các

chân GPIO (0-15)

 Yêu cầu từ chân 0 –được thực hiện trênline 0

 Yêu cầu từ chân 1 –được thực hiện trênline 1

 …

 Yêu cầu từ chân 15 –được thực hiện trênline 15

Trang 14

 Các line 0, line1, line2, line3, line 4 sẽ được phân vào các vector

Trang 15

 4 line ngắt EXTI còn lại đuợc nối như sau:

 EXTI line 16 được nối vào PVD output

 EXTI line 17 được nối vào RTC Alarm event.

 EXTI line 18 được nối vào USB Wakeup event.

 EXTI line 19 được nối vào Ethernet Wakeup event.

Trang 16

 37 GPIO có thể thiết lập là ngắt bên ngoài bằng cách thiết lập các thanh ghi hoặc các hàm API

 Interrupt mask register (EXTI_IMR)

 Event mask register (EXTI_EMR)

 Rising trigger selection register (EXTI_RTSR)

 Falling trigger selection register (EXTI_FTSR)

 Software interrupt mask register (EXTI_SWIER)

 Pending register (EXTI_PR)

3.3.2 Ngắt ngoài GPIO (EXTI)

Trang 18

 Ưu tiên khi sử dụng ngắt

 Có 2 loại ưu tiên ngắt : 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 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

 Khi 2 ngắt có cùng mức Preemption và Sub Priority luôn thì ngắt nào đến trước được thực hiện trước

3.3.2 Ngắt ngoài GPIO (EXTI)

Trang 19

 Ưu tiên khi sử dụng ngắt

 Có 5 nhóm ưu tiên ngắt

 4 bit thiết lập ưu tiên

3.3.2 Ngắt ngoài GPIO (EXTI)

Priority Group Preemption Priority Level Subpriority Level

4 4 bits/16 levels 0 bit/ 0 level

3 3 bits/8 levels 1 bit/2 levels

2 2 bits/4 levels 2 bits/4 levels

1 1 bit/2 levels 3 bits/8 levels

0 0 bit/ 0 level 4 bits/16 levels

Preemption Priority

Subpriority

Trang 20

 Thanh ghi thiết lập ưu tiên ngắt SCB->AIRCR

Trang 21

 Các hàm API trong HAL

3.3.2 Ngắt ngoài GPIO (EXTI)

Trang 22

 Các hàm API trong HAL

3.3.2 Ngắt ngoài GPIO (EXTI)

Trang 23

 Các bước lập trình với ngắt GPIO

Bước 3 Cấu hình chân EXTI

- Chân ngắt phải thiết lập chiều vào dữ liệu

- Lựa chọn nguyên nhân gây ra ngắt

3.3.2 Ngắt ngoài GPIO (EXTI)

Trang 24

 Các bước lập trình với ngắt GPIO

Bước 3 Cấu hình chân EXTI

- Chân ngắt phải thiết lập chiều vào dữ liệu

- Lựa chọn nguyên nhân gây ra ngắt

GPIO_InitStruct.Pin = GPIO_PIN_0;

GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;

GPIO_InitStruct.Pull = GPIO_PULLUP;

HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

3.3.2 Ngắt ngoài GPIO (EXTI)

Trang 25

 Các bước lập trình với ngắt GPIO

Bước 4 Cấu hình NVIC:

- Bật kênh ngắt trong NVIC: HAL_NVIC_EnableIRQ(EXTI0_IRQn);

- Cấu hình mức độ ưu tiên: HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0);

- Cấu hình nhóm ưu tiên:

HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);

Bước 5 Chờ khi có ngắt

- Chờ ngắt trong chương trình chính

- Viết chương trình con phục vụ ngắt

3.3.2 Ngắt ngoài GPIO (EXTI)

Trang 26

 Các bước lập trình với ngắt GPIO

Bước 5 Viết chương trình con phục vụ ngắt

Trong file "stm32f1xx_it.c“ hoặc trong “main.c”

void EXTI0_IRQHandler(void) // Ví dụ ngắt GPIO Line 0{

B1 Xóa cờ ngắt bằng hàm :

HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_0);

B2 Kiểm tra điều kiện khi xảy ra ngắt GPIO: ví dụ: PA0

if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==0) { //thực hiện lệnh }

B3 Xử lý yêu cầu khi có ngắt:

HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);

}

3.3.2 Ngắt ngoài GPIO (EXTI)

Trang 27

 Các bước lập trình với ngắt GPIO trên STM CUBE

B1 Cấu hình chân GPIO là ngắt ngoài (trên chân PA0)

3.3.2 Ngắt ngoài GPIO (EXTI)

Trang 28

 Các bước lập trình với ngắt GPIO trên STM CUBE

B1 Cấu hình chân GPIO là ngắt ngoài (trên chân PA0)

 Thiết lập GPIO_EXTI0 trên chân PA0

3.3.2 Ngắt ngoài GPIO (EXTI)

Trang 29

 Các bước lập trình với ngắt GPIO trên STM CUBE

B2 Lựa chọn nguyên nhân gây ngắt trên chân GPIO – PA0

 Lựa chọn GPIO

3.3.2 Ngắt ngoài GPIO (EXTI)

Trang 30

 Các bước lập trình với ngắt GPIO trên STM CUBE

B2 Lựa chọn nguyên nhân gây ngắt trên chân GPIO – PA0

 Thiết lập nguyên nhân gây ngắt :

3.3.2 Ngắt ngoài GPIO (EXTI)

Trang 31

 Các bước lập trình với ngắt GPIO trên STM CUBE

B2 Lựa chọn nguyên nhân gây ngắt trên chân GPIO – PA0

 Thiết lập nguyên nhân gây ngắt : lựa chọn ngắt sườn âm trên PA0

External Interrupt Mode with Falling edge trigger detection

3.3.2 Ngắt ngoài GPIO (EXTI)

Trang 32

 Các bước lập trình với ngắt GPIO trên STM CUBE

B2 Lựa chọn nguyên nhân gây ngắt trên chân GPIO – PA0

 Thiết lập nguyên nhân gây ngắt : lựa chọn Pull-up

3.3.2 Ngắt ngoài GPIO (EXTI)

Trang 33

 Các bước lập trình với ngắt GPIO trên STM CUBE

B3 Thiết lập ưu tiên ngắt

 Lựa chọn NVIC

3.3.2 Ngắt ngoài GPIO (EXTI)

Trang 34

 Các bước lập trình với ngắt GPIO trên STM CUBE

B3 Thiết lập ưu tiên ngắt

 Lựa chọn nhóm ưu tiên NVIC

3.3.2 Ngắt ngoài GPIO (EXTI)

Trang 35

 Các bước lập trình với ngắt GPIO trên STM CUBE

B3 Thiết lập ưu tiên ngắt

 Lựa chọn mức ưu tiên: Preemption - Sub

3.3.2 Ngắt ngoài GPIO (EXTI)

Trang 36

 Các bước lập trình với ngắt GPIO trên STM CUBE

 Lựa chọn chân chiều vào, chiều ra, mode Thiết lập các thông số trênSTM32CubeMX như trong hướng dẫn lập trình với GPIO

 Sau đó chọn GENERATE CODE để tạo file Code

3.3.2 Ngắt ngoài GPIO (EXTI)

Trang 37

{ } HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0); }

Khung chương trình sử dụng ngắt – Ví dụ ngắt PA0

Trang 38

Ví dụ 01:

Lập trình điều khiển LED1 (PA10) sáng nhấp nháy (nhanh) với chu kì 200ms, khi nhấn nút PB1 (PA0) LED1 chuyển sang chế độ sáng nhấp nháy (chậm) với chu kì 1s - 10 lần, sau đó LED1 tiếp tục nháy nhanh

3.3.2 Ngắt ngoài GPIO (EXTI)

Trang 40

//Chương trình con phục vụ ngắt – viết trong file “stm32f1xx_it.c”

Hoặc trong “main.c”

void EXTI0_IRQHandler(void)

{

if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==0) {

for(int i=0;i<10;i++)

{ HAL_GPIO_WritePin(GPIOA,GPIO_PIN_10,GPIO_PIN_SET);

HAL_Delay(500);

HAL_GPIO_WritePin(GPIOA,GPIO_PIN_10,GPIO_PIN_RESET); HAL_Delay(500);

} }

HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);

}

Khung chương trình sử dụng ngắt – Ví dụ ngắt PA0

Trang 42

Bài tập:

Bài tập 1 Lập trình điều khiển LED sáng nhấp nháy (nhanh) với chu kì

100ms, khi nhấn nút UP, LED chuyển sang chế độ sáng nhấp nháy (chậm) với chu kì 1s - 10 lần, sau đó LED tiếp tục nháy nhanh

Bài tập 2 Lập trình điều khiển LED sáng nhấp nháy (nhanh) với chu kì

200ms, khi nhấn nút DOWN, LED chuyển sang chế độ sáng nhấp nháy

(chậm) với chu kì 1s - 10 lần, sau đó LED tiếp tục nháy nhanh

Bài tập 3 Lập trình điều khiển LED sáng nhấp nháy(nhanh) với chu kì

100ms, khi nhấn nút UP, LED chuyển sang chế độ sáng nhấp nháy (chậm) với chu kì 500ms - 10 lần, khi nhấn nút DOWN, LED chuyển sang chế độ sáng nhấp nháy (chậm) với chu kì 1000ms - 5 lần

3.3.2 Ngắt ngoài GPIO (EXTI)

Ngày đăng: 03/01/2023, 17:53

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w