Lập trình các thanh gh

Một phần của tài liệu Bài giảng Hệ thống nhúng: Phần 2 (Trang 53 - 54)

CHƯƠN G5 PHÁT TRIỂN HỆ THỐNG NHÚNG DỰA TRÊN VXL ARM

5.3.1 Lập trình các thanh gh

Đối với mỗi ngoại vi sẽ có một bộ điều khiển, bộ điều khiển này giao diện với chương trình phần mềm qua 1 hoặc nhiều thanh ghi. Bộ xử lý giao tiếp với các bộđiều khiển bằng việc đọc và ghi các bit lên các thanh ghi này thông qua các lệnh truyền 1 byte hay 1 từ tới 1 địa chỉ cổng I/O. Các lệnh I/O này sẽ kích khởi các đường bus để chọn đúng thiết bị và chuyển các bit tới hoặc đọc các bit từ một thanh ghi thiết bị. Các thanh ghi này được ánh xạ vào không gian địa chỉ của bộ vi xử lý. Kỹ thuật này được gọi là kỹ thuật I/O ánh xạ bộ nhớ - memory-mapped I/O.

Một thiết bị điển hình gồm 4 thanh ghi được gọi là thanh ghi trạng thái, thanh ghi điều khiển, thanh ghi dữ liệu vào (data-in), thanh ghi dữ liệu ra (data-out):

- Thanh ghi dữ liệu vào – data-in register : được đọc bởi CPU đểđọc đầu vào - Thanh ghi dữ liệu ra – data-out register : được ghi bởi CPU để gửi dữ liệu tới

thiết bị

- Thanh ghi trạng thái – status register : chứa các bit có thể được đọc bởi CPU. Những bit này chỉ trạng thái của thiết bị như yêu cầu hiện thời đã được thực thi xong chưa, một byte đã sẵn để đọc trong thanh ghi data-in chưa, có lỗi xảy ra không,...

- Thanh ghi điều khiển – control register : có thểđược ghi bởi CPU để bắt đầu 1 yêu cầu hoặc để thay đổi mode hoạt động của thiết bị.

Các thanh ghi dữ liệu điển hình có kích thước 1 đến 4 byte. Một vài bộđiều khiển có các chip FIFO – một bộ nhớ sử dụng nguyên lý first in first out – để chứa nhiều byte dữ

liệu đầu vào hoặc ra nhằm tăng khả năng của bộđiều khiển so với kích thước của thanh ghi dữ liệu. Một chip FIFO có thể chứa 1 lượng dữ liệu cho đến khi thiết bị hoặc CPU có thể nhận những dữ liệu này, hay có thể gọi đây là bộđệm.

Thường để thuận tiện sử dụng các thanh ghi này, chúng ta sử dụng khai báo các định danh đến các thanh ghi trong một file header giúp dễ dàng nhớ tên các định danh thay vì phải nhớđịa chỉ của các thanh ghi. Ví dụ khai báo các thanh ghi cho LPC2378, trong file lpc23xx.h đi kèm bộ công cụ KeilC.

/* Vectored Interrupt Controller (VIC) */ #define VIC_BASE_ADDR 0xFFFFF000

#define VICIRQStatus (*(volatile unsigned long *)(VIC_BASE_ADDR + 0x000))

...

/* Pin Connect Block */

#define PINSEL_BASE_ADDR 0xE002C000

#define PINSEL0(*(volatile unsigned long *)(PINSEL_BASE_ADDR + 0x00)) ...

/* General Purpose Input/Output (GPIO) */ #define GPIO_BASE_ADDR 0xE0028000

#define IOPIN0 (*(volatile unsigned long *)(GPIO_BASE_ADDR + 0x00)) ...

/* Memory Accelerator Module (MAM) */

#define MAMCR (*(volatile unsigned long *)(SCB_BASE_ADDR + 0x000)) ...

Một phần của tài liệu Bài giảng Hệ thống nhúng: Phần 2 (Trang 53 - 54)

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

(89 trang)