0% found this document useful (0 votes)
79 views5 pages

Direct Memory Access Controller (DMA)

Bộ điều khiển DMA có 12 kênh để hỗ trợ truyền dữ liệu nhanh giữa thiết bị ngoại vi và bộ nhớ mà không cần sự can thiệp của CPU. Mỗi kênh có thể được cấu hình độc lập với địa chỉ nguồn, đích, kích thước dữ liệu, mức độ ưu tiên và hỗ trợ chế độ tuần hoàn.

Uploaded by

Thái Sơn
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
79 views5 pages

Direct Memory Access Controller (DMA)

Bộ điều khiển DMA có 12 kênh để hỗ trợ truyền dữ liệu nhanh giữa thiết bị ngoại vi và bộ nhớ mà không cần sự can thiệp của CPU. Mỗi kênh có thể được cấu hình độc lập với địa chỉ nguồn, đích, kích thước dữ liệu, mức độ ưu tiên và hỗ trợ chế độ tuần hoàn.

Uploaded by

Thái Sơn
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd

13.

Direct memory access controller (DMA)


13.1. Introduction
Truy cập bộ nhớ trực tiếp (DMA) được sử dụng để cung cấp truyền dữ liệu tốc độ cao giữa
các thiết bị ngoại vi và bộ nhớ cũng như bộ nhớ với bộ nhớ. Dữ liệu có thể được di chuyển
nhanh chóng bằng DMA mà không cần bất kỳ hành động nào của CPU. Điều này giúp tài
nguyên CPU rảnh rỗi cho các hoạt động khác.
Hai bộ điều khiển DMA có tổng cộng 12 kênh (7 cho DMA1 và 5 cho DMA2), mỗi kênh
chuyên quản lý các yêu cầu truy cập bộ nhớ từ một hoặc nhiều thiết bị ngoại vi. Nó có một
bộ trọng tài để xử lý mức độ ưu tiên giữa các yêu cầu DMA.

13.2 DMA main features


 12 kênh cấu hình độc lập (yêu cầu): 7 kênh cho DMA1 và 5 kênh cho DMA2
 Mỗi kênh trong số 12 kênh được kết nối với các yêu cầu DMA phần cứng chuyên
dụng, đồng thời hỗ trợ kích hoạt bằng phần mềm trên mỗi kênh. Cấu hình này
được thực hiện bằng phần mềm.
 Mức độ ưu tiên giữa các yêu cầu từ các kênh của một DMA có thể được lập trình
bằng phần mềm (4 mức gồm rất cao, cao, trung bình, thấp) hoặc phần cứng trong
trường hợp có sự bình đẳng (yêu cầu 1 có mức độ ưu tiên cao hơn yêu cầu 2, v.v.)
 Kích thước truyền nguồn và đích độc lập (byte, nửa từ, từ), mô phỏng đóng gói và
giải nén. Các địa chỉ nguồn/đích phải được căn chỉnh theo kích thước dữ liệu.
 Hỗ trợ quản lý bộ đệm vòng
 3 cờ sự kiện (DMA Half Transfer, DMA Transfer Complete và DMA Transfer
Error) được ghép OR logic với nhau trong một yêu cầu ngắt duy nhất cho mỗi
kênh
 Truyền từ bộ nhớ đến bộ nhớ
 Truyền từ thiết bị ngoại vi đến bộ nhớ, bộ nhớ đến thiết bị ngoại vi và thiết bị
ngoại vi đến thiết bị ngoại vi
 Truy cập vào Flash, SRAM, APB1, APB2 và AHB ngoại vi làm nguồn và đích
 Số lượng dữ liệu được lập trình để truyền: lên đến 65536
13.3 DMA functional description

Bộ điều khiển DMA thực hiện truyền dữ liệu trực tiếp bằng cách chia sẻ bus hệ thống với lõi
Cortex®-M3. Yêu cầu DMA có thể tạm dừng quyền truy cập của CPU vào bus hệ thống
trong một số chu kỳ bus, khi CPU và DMA đang nhắm đến cùng một đích (bộ nhớ hoặc thiết
bị ngoại vi). Ma trận bus triển khai cơ chế lên lịch theo vòng tròn (round-robin scheduling),
do đó đảm bảo ít nhất một nửa băng thông bus hệ thống (cho cả bộ nhớ và thiết bị ngoại vi)
cho CPU.

13.3.1 DMA transactions

Sau khi xảy ra một sự kiện, thiết bị ngoại vi gửi tín hiệu yêu cầu đến Bộ điều khiển DMA.
Bộ điều khiển DMA xử lý yêu cầu tùy thuộc vào mức độ ưu tiên của kênh. Ngay khi Bộ điều
khiển DMA truy cập vào thiết bị ngoại vi, một Tín hiệu Báo nhận được gửi đến thiết bị ngoại
vi bởi Bộ điều khiển DMA. Thiết bị ngoại vi giải phóng yêu cầu của nó ngay khi nhận được
Tín hiệu Báo nhận từ Bộ điều khiển DMA. Khi yêu cầu được hủy bỏ bởi thiết bị ngoại vi, Bộ
điều khiển DMA sẽ giải phóng Tín hiệu Báo nhận. Nếu có nhiều yêu cầu hơn, thiết bị ngoại
vi có thể bắt đầu giao dịch tiếp theo.

Tóm lại, mỗi lần truyền DMA bao gồm ba thao tác:

 Tải dữ liệu từ thanh ghi dữ liệu ngoại vi hoặc một vị trí trong bộ nhớ được đánh địa
chỉ thông qua thanh ghi địa chỉ ngoại vi/bộ nhớ hiện tại nội bộ. Địa chỉ bắt đầu được
sử dụng cho lần truyền đầu tiên là địa chỉ ngoại vi/bộ nhớ cơ sở được lập trình trong
thanh ghi DMA_CPARx hoặc DMA_CMARx.
 Lưu trữ dữ liệu đã tải vào thanh ghi dữ liệu ngoại vi hoặc một vị trí trong bộ nhớ được
đánh địa chỉ thông qua thanh ghi địa chỉ ngoại vi/bộ nhớ hiện tại nội bộ. Địa chỉ bắt
đầu được sử dụng cho lần truyền đầu tiên là địa chỉ ngoại vi/bộ nhớ cơ sở được lập
trình trong thanh ghi DMA_CPARx hoặc DMA_CMARx.
 Giảm dần giá trị của thanh ghi DMA_CNDTRx, chứa số lượng giao dịch vẫn còn phải
thực hiện.

13.3.2 Arbiter

Bộ điều phối quản lý các yêu cầu kênh dựa trên mức độ ưu tiên của chúng và khởi chạy các
chuỗi truy cập bộ nhớ/ngoại vi.

Các mức độ ưu tiên được quản lý theo hai giai đoạn:

1. Phần mềm:

Mức ưu tiên của mỗi kênh có thể được cấu hình trong thanh ghi DMA_CCRx.
Có bốn mức ưu tiên:
 Rất cao (Very high priority)
 Cao (High priority)
 Trung bình (Medium priority)
 Thấp (Low priority)

2. Phần cứng:

Nếu hai yêu cầu có cùng mức ưu tiên phần mềm, kênh có số thứ tự thấp hơn sẽ được ưu tiên
hơn kênh có số thứ tự cao hơn. Ví dụ: kênh 2 được ưu tiên hơn kênh 4.
Lưu ý: Trong các thiết bị dòng mật độ cao, mật độ cực cao và kết nối, bộ điều khiển DMA1
được ưu tiên hơn bộ điều khiển DMA2.

13.3.3 DMA channels

Mỗi kênh có thể xử lý việc truyền dữ liệu trực tiếp (DMA) giữa một thanh ghi ngoại vi nằm
ở địa chỉ cố định và một địa chỉ bộ nhớ. Lượng dữ liệu cần truyền (tối đa 65535) có thể lập
trình được. Thanh ghi chứa số lượng dữ liệu cần truyền sẽ giảm dần sau mỗi giao dịch.

Kích thước dữ liệu có thể lập trình:


Kích thước dữ liệu truyền của ngoại vi và bộ nhớ được lập trình hoàn toàn thông qua các bit
PSIZE và MSIZE trong thanh ghi DMA_CCRx.

Tự động tăng con trỏ:


Các con trỏ ngoại vi và bộ nhớ có thể được tự động tăng sau mỗi giao dịch tùy thuộc vào các
bit PINC và MINC trong thanh ghi DMA_CCRx. Nếu chế độ tăng được bật, địa chỉ của lần
truyền tiếp theo sẽ là địa chỉ của lần truyền trước đó được tăng thêm 1, 2 hoặc 4 tùy thuộc
vào kích thước dữ liệu đã chọn. Địa chỉ truyền đầu tiên là địa chỉ được lập trình trong các
thanh ghi DMA_CPARx /DMA_CMARx. Trong quá trình truyền dữ liệu, các thanh ghi này
giữ nguyên giá trị được lập trình ban đầu. Các địa chỉ truyền hiện tại (trong thanh ghi địa chỉ
ngoại vi / bộ nhớ nội bộ hiện tại) không thể truy cập được bằng phần mềm.

Nếu kênh được cấu hình ở chế độ không tuần hoàn, sẽ không có yêu cầu DMA nào được
phục vụ sau lần truyền cuối cùng (tức là khi số lượng dữ liệu cần truyền đã đạt đến 0).
Để tải lại số lượng dữ liệu cần truyền mới vào thanh ghi DMA_CNDTRx, kênh DMA phải
được tắt.
Lưu ý: Nếu một kênh DMA bị tắt, các thanh ghi DMA không được đặt lại. Các thanh ghi
kênh DMA (DMA_CCRx, DMA_CPARx và DMA_CMARx) vẫn giữ các giá trị ban đầu
được lập trình trong giai đoạn cấu hình kênh.

Trong chế độ tuần hoàn (circular mode), sau lần truyền cuối cùng, thanh ghi
DMA_CNDTRx sẽ tự động được tải lại với giá trị được lập trình ban đầu.
Các thanh ghi địa chỉ nội bộ hiện tại được tải lại với các giá trị địa chỉ cơ sở từ các thanh ghi
DMA_CPARx / DMA_CMARx.
Quy trình cấu hình kênh:

Thực hiện theo trình tự sau để cấu hình kênh DMAx (trong đó x là số kênh):
 Đặt địa chỉ thanh ghi ngoại vi trong thanh ghi DMA_CPARx. Dữ liệu sẽ được chuyển
từ / đến địa chỉ này đến / từ bộ nhớ sau sự kiện ngoại vi.
 Đặt địa chỉ bộ nhớ trong thanh ghi DMA_CMARx. Dữ liệu sẽ được ghi vào hoặc đọc
từ bộ nhớ này sau sự kiện ngoại vi.
 Cấu hình tổng số dữ liệu cần truyền trong thanh ghi DMA_CNDTRx. Sau mỗi sự kiện
ngoại vi, giá trị này sẽ giảm xuống.
 Cấu hình mức độ ưu tiên của kênh bằng các bit PL [1: 0] trong thanh ghi DMA_CCRx
 Cấu hình hướng truyền dữ liệu, chế độ tuần hoàn, chế độ tăng ngoại vi và bộ nhớ, kích
thước dữ liệu ngoại vi và bộ nhớ, và ngắt sau khi truyền một nửa và / hoặc toàn bộ
trong thanh ghi DMA_CCRx
 Kích hoạt kênh bằng cách đặt bit ENABLE trong thanh ghi DMA_CCRx.

Ngay sau khi kênh được kích hoạt, nó có thể phục vụ bất kỳ yêu cầu DMA nào từ thiết bị
ngoại vi được kết nối trên kênh. Khi một nửa số byte được truyền, Half-Transfer flag (HTIF)
được đặt và ngắt được tạo nếu bit Half-Transfer Interrupt Enable (HTIE) được đặt. Khi kết
thúc quá trình truyền, Transfer Complete Flag (TCIF) được đặt và ngắt được tạo nếu bit
Transfer Complete Interrupt Enable (TCIE) được đặt.

Chế độ tuần hoàn (Circular mode):

Circular mode có sẵn để xử lý các bộ đệm vòng và các luồng dữ liệu liên tục (ví dụ: chế độ
quét ADC). Có thể bật tính năng này bằng cách sử dụng bit CIRC trong thanh ghi
DMA_CCRx. Khi circular mode được kích hoạt, số lượng dữ liệu cần truyền sẽ tự động
được nạp lại với giá trị ban đầu được lập trình trong giai đoạn cấu hình kênh và các yêu cầu
DMA tiếp tục được phục vụ.

Chế độ bộ nhớ trực tiếp (Memory-to-memory mode)

Các kênh DMA có thể hoạt động mà không cần được kích hoạt bởi yêu cầu từ thiết bị ngoại
vi. Chế độ này được gọi là Memory-to-memory mode.
Nếu bit MEM2MEM trong thanh ghi DMA_CCRx được đặt, kênh sẽ bắt đầu truyền ngay
khi được kích hoạt bằng phần mềm bằng cách đặt bit Enable (EN) trong thanh ghi
DMA_CCRx. Quá trình truyền dừng lại khi thanh ghi DMA_CNDTRx đạt đến 0. Chế độ
Memory to Memory không được sử dụng cùng lúc với chế độ Circular mode.

You might also like