Direct memory access controller (DMA).

Một phần của tài liệu KỸ THUẬT lập TRÌNH VI điều KHIỂN STM32F1xxx (Trang 32 - 35)

DMA – Direct memory access được sử dụng với mục đích truyền data với tốc độ cao từ thiết bị ngoại vi đến bộ nhớ cũng như từ bộ nhớ đến bộ nhớ.

Với DMA, dữ liệu sẽ được truyền đi nhanh chóng mà không cần đến bất kỳ sự tác động nào của CPU. Điều này sẽ giữ cho tài nguyên của CPU được rảnh rỗi cho các thao tác khác.

Trong sơ đồ khối trên, sự tồn tại của DMA giờ đây có thể hướng luồng dữ liệu từ ngoại vi UART/SPI/ADC/TIM trực tiếp đến bộ nhớ trong khi CPU đang thực hiện công việc tính toán khác. Nhờ vậy giúp cho tài nguyên CPU được rỗi hơn và có thể dành thời gian thực hiện các hoạt động khác.

DMA trên kit STM32F103C8T6:

 12 kênh có thể cấu hình độc lộc: 7 kênh DMA1 và 5 DMA2

 Mức độ ưu tiên từ các kênh DMA có thể lâp trình được bằng phần mềm gồm 4 mức (very high, high, medium, low)

 Kích thước data được sử dụng là 1 Byte, 2 Byte (Half Word) hoặc 4byte (Word)

 Hỗ trợ việc lặp lại liên tục Data.

 5 cờ báo ngắt (DMA Half Transfer, DMA Transfer complete, DMA Transfer Error, DMA FIFO Error, Direct Mode Error).

 Quyền truy cập tới Flash, SRAM, APB1, APB2, APB.

 Số lượng data có thể lập trình được lên tới 65535.

DMA có hai bộ điều khiển đó là DMA1 và DMA2 với tính năng kết hợp với các ngoại vi khác nhau , DMA sẽ hỗ trợ ba giao tiếp cơ bản :

 Memory  Memory

 Memory Peripheral

 Peripheral Memory Các bước để cấu hình DMA :

4.1.Trước hết chúng ta cần tìm ra DMA (và kênh) nào chúng ta có thể sử dụng. Mỗi kênh đều được liên kết với một số thiết bị ngoại vi cụ thể và chúng ta phải chọn kênh theo thiết lập của mình.

Như bạn có thể thấy trong hình trên, phải sử dụng kênh 6 của DMA1 cho UART2_RX. Bây giờ phần tiếp theo của thiết lập sẽ cấu hình các thuộc tính DMA.

4.2.Khởi tạo DMA.

Để khởi tạo được DMA chúng ta cần tìm hiểu thanh ghi DMA-CCR :

1. Ở đây, trước hết chúng ta sẽ kích hoạt clock DMA1

2. Bật tất cả 3 ngắt (Halt Transfer, Transfer Complete and Transfer Error). 3. Sao chép dữ liệu từ peripheral to the memory.

4. Tiếp theo, bật chế độ circular cho DMA.

5. Sau đó, tăng địa chỉ ngoại vi phải được tắt và phải bật tăng địa chỉ bộ nhớ, điều này có nghĩa là chúng ta sẽ đọc giá trị từ một vùng nhớ như ADC-DATA và mỗi lần đọc sẽ lưu vào giá trị ở memory, giá trị sau sẽ lưu vào một vị trí mới

6. Tiếp theo, chúng tôi sẽ chọn kích thước dữ liệu, sẽ là 8 bit.

7. Và cuối cùng chúng ta sẽ đặt mức ưu tiên cho kênh , giữ nó 0 ở đây, vì chỉ sử dụng 1 kênh.

8. Nhưng nếu sử dụng nhiều hơn 1 kênh, mức độ ưu tiên này có thể hữu ích để đặt mức độ ưu tiên của các kênh.

Cấu hình địa chỉ muốn đọc , địa chỉ bộ nhớ ghi data và kích thước của data đó.

Cấu hình chương trình ngắt khi xảy ra lỗi hoặc truyền data xong.

Một phần của tài liệu KỸ THUẬT lập TRÌNH VI điều KHIỂN STM32F1xxx (Trang 32 - 35)

Tải bản đầy đủ (DOCX)

(42 trang)
w