Dải Bit (Bit Banding)

Một phần của tài liệu Kiến trúc cơ bản của STM32 ARM Cortex m3 (Trang 25 - 28)

Các phiên bản CPU ARM7 và ARM9 trước ñó chỉ có thể thực hiện thao tác bit trên bộ nhớ SRAM và vùng nhớ thiết bị ngoại vi bằng cách dùng các phép toán AND và OR. Điều này ñòi hỏi thao tác ñọc sửa ñổi ghi (READ MODIFY

WRITE operation), thao tác này sẽ tốn nhiều chu kì thực hiện ñể thiết lập và xoá các bit riêng biệt và cần nhiều không gian mã cho mỗi bit.

Hình 2.8. Thao tác ñọc sửa ñổi ghi của CPU ARM7 và ARM9 và kĩ thuật dải Bit của bộ xử lí Cortex-M3

Kỹ thuật dải Bit cho phép bộ xử lí Cortex-M3 thao tác các bit trong khi vẫn giữ ñược số lượng bóng bán dẫn ở mức tối thiểu.

Để khắc phục những hạn chế trong các thao tác bit ở CPU ARM7 và ARM9, có thểñưa ra các lệnh chuyên dụng ñể thiết lập hoặc xoá bit, hoặc một bộ xử lý Boolean ñầy ñủ, nhưng ñiều này sẽ làm tăng kích thước và sự phức tạp của CPU Cortex. Thay vào ñó, một kỹ thuật gọi là dải bit cho phép thao tác bit trực tiếp trên các phần không gian bộ nhớ của các thiết bị ngoại vi và SRAM, mà

không sự cần bất kỳ lệnh ñặc biệt nào. Các khu vực ñịnh ñịa chỉ bit của bản ñồ

bộ nhớ Cortex bao gồm vùng bit band (lên ñến 1Mbyte bộ nhớ thực hoặc các thanh ghi ngoại vi) và vùng biệt hiệu bit band (bit band Alias region) chiếm

ñến 32Mbyte của bản ñồ bộ nhớ. Dải Bit hoạt ñộng bằng cách ánh xạ mỗi bit trong vùng bit band tới một ñịa chỉ word trong vùng Alias. Vì vậy, bằng cách thiết lập và xoá ñịa chỉ word ñược ñặt biệt hiệu (aliased word address) chúng ta có thể thiết lập và xoá các bit trong bộ nhớ thực.

Hình 2.9. Dải Bit của vùng bộ nhớ SRAM và các ngoại vi

Dải Bit ñược hỗ trợ trên 1Mb ñầu tiên của khu vực SRAM và ngoại vi . Nó bao gồm tất cả các tài nguyên của STM32.

Kỹ thuật Bit Banding cho phép thực hiện thao tác bit riêng lẻ mà không cần bất kì lệnh ñặc biệt nào, ñiều này giữ cho kích thước tổng thể của lõi Cortex nhỏ

nhất có thể. Trong thực tế, chúng ta cần phải tính toán ñịa chỉ của các word nằm trong vùng Bit Band Alias cho một vị trí bộ nhớ nhất ñịnh trong không gian bộ nhớ của thiết bị ngoại vi hoặc SRAM. Công thức ñể tính toán alias address như sau:

Địa chỉ trong khu vực Bit Band Alias = Bit band alias base address + bit word offset

Cho một ví dụ thực tế, thanh ghi dữ liệu ñầu ra GPIO (General Purpose I/O)

ñược ghi vào ñể thiết lập và xoá các ñường I/O riêng biệt. Địa chỉ vật lý của thanh ghi ñầu ra của port B là 0x40010C0C. Trong ví dụ này, chúng ta muốn có thể thiết lập và xáo 8 bit của word này bằng cách sử dụng công thức trên. Word address = 0x40010C0C

Peripheral bit band base = 0x40000000 Peripheral bit band Alias base = 0x42000000

Byte offset from bit band base = 0x40010c0c–0x40000000 = 10c0c Bit word offset = (0x10c0c x 0x20) +(8x4) = 0x2181A0 Bit Alias address = 0x42000000 + 0x2181A0 = 0x422181A0 Bây giờ chúng ta có thể tạo ra một con trỏ ñến ñịa chỉ này bằng cách sử dụng các dòng lệnh C như sau :

#define PB8 (*((volatile unsigned long*)0x422181A0)) // Port B bit 8 Con trỏ này có thểñược sử dụng ñể thiết lập và xoá các bit của cổng I/O này: PB8 = 1; // led on

Mã trên ñược biên dịch ra ngôn ngữ assembly như sau: MOVS r0,#0x01

LDR r1,[pc,#104] STR r0,[r1,#0x00] Tắt LED:

PB8 = 0; // led off Tạo ra mã assembly sau ñây: MOVS r0,#0x00 LDR r1,[pc,#88] STR r0,[r1,#0x00]

Cả hai thao tác thiết lập và xoá mất ba lệnh 16-bit và với STM32 chạy ở tần số

72 MHz các lệnh này ñược thực hiện trong 80nsec. Bất kỳ một word trong khu vực bit band của thiết bị ngoại vi và SRAM có thểñược ñịnh ñịa chỉ trực tiếp toàn word (word-wide), vì vậy có thể thực hiện việc thiết lập và xoá bằng cách sử dụng phương pháp truyền thống với các lệnh AND và OR:

GPIOB→ODR|=0x00000100; //LED on LDR r0,[pc,#68] ADDS r0,r0,#0x08 LDR r0,[r0,#0x00] ORR r0,r0,#0x100 LDR r1,[pc,#64] STR r0,[r1,#0xC0C]

GPIOB→ODR &= !0x00000100; //LED off LDR r0,[pc,#40] ADDS r0,r0,#0x08 LDR r0,[r0,#0x00] MOVS r0,#0x00 LDR r1,[pc,#40] STR r0,[r1,#0xC0C]

Trường hợp này mỗi thao tác thiết lập và xoá sẽ lấy các phép toán hỗn hợp giữa 16 và 32-bit, ñiều này phải mất tối thiểu 14 byte cho từng phép toán và ở

cùng một tần số 72MHz sẽ mất tối thiểu là 180 nSec. Nếu xem xét tác ñộng của dải bit trên một ứng dụng nhúng ñiển hình thì việc thiết lập và xóa nhiều bit trong các thanh ghi ngoại vi và sử dụng semaphores (một dạng như cờ dùng

ñể lập trình trong môi trường hệ ñiều hành) và cờ trong SRAM, rõ ràng kỹ

thuật bit band sẽ tiết kiệm ñáng kể kích thước mã và thời gian thực hiện.

Một phần của tài liệu Kiến trúc cơ bản của STM32 ARM Cortex m3 (Trang 25 - 28)