Cấu trúc bộ nhớ AVR

Một phần của tài liệu Thiết kế và chế tạo mô hình cửa tự động (Trang 29 - 33)

- Mạch nạp USB AVR

2.2.3.3. Cấu trúc bộ nhớ AVR

AVR cĩ cấu trúc Harvard, trong đĩ đường truyền cho bộ nhớ dữ liệu (data memory bus) và đường truyền cho bộ nhớ chương trình (program memory bus) được tách riêng. Data memory bus chỉ cĩ 8 bit và được kết nối với hầu hết các thiết bị ngoại vi, với register file. Trong khi đĩ program memory bus cĩ độ rộng 16 bits và chỉ phục vụ cho instruction registers.

Hình 2.19. Cấu trúc bộ nhớ AVR

Bộ nhớ chương trình (Program memory): Là bộ nhớ Flash lập trình được, trong các chip AVR cũ (như AT90S1200 hay AT90S2313…) bộ nhớ chương trình chỉ gồm 1 phần là Application Flash Section nhưng trong các chip AVR mới chúng ta cĩ thêm phần Boot Flash setion. Boot section sẽ được khảo sát trong các phần

sau, trong bài này khi nĩi về bộ nhớ chương trình, chúng ta tự hiểu là Application section. Thực chất, application section bao gồm 2 phần: Phần chứa các instruction (mã lệnh cho hoạt động của chip) và phần chứa các vector ngắt (interrupt vectors). Các vector ngắt nằm ở phần đầu của application section (từ địa chỉ 0×0000) và dài đến bao nhiêu tùy thuộc vào loại chip. Phần chứa instruction nằm liền sau đĩ, chương trình viết cho chip phải được load vào phần này.

Bộ nhớ dữ liệu (data memory): Đây là phần chứa các thanh ghi quan trọng nhất của chip, việc lập trình cho chip phần lớn là truy cập bộ nhớ này. Bộ nhớ dữ liệu trên các chip AVR cĩ độ lớn khác nhau tùy theo mỗi chip, tuy nhiên về cơ bản phần bộ nhớ này được chia thành 5 phần:

Hình 2.20. Thanh nghi 8 bít

Phần 1: Là phần đầu tiên trong bộ nhớ dữ liệu, như mơ tả trong hình 1, phần này bao gồm 32 thanh ghi cĩ tên gọi là register file (RF), hay General Purpose Rgegister – GPR, hoặc đơn giản là các Thanh ghi. Tất cả các thanh ghi này đều là các thanh ghi 8 bits như trong hình .

Hình 2.21. Register file

Tất cả các chip trong họ AVR đều bao gồm 32 thanh ghi Register File cĩ địa chỉ tuyệt đối từ 0×0000 đến 0x001F. Mỗi thanh ghi cĩ thể chứa giá trị dương từ 0 đến 255 hoặc các giá trị cĩ dấu từ -128 đến 127 hoặc mã ASCII của một ký tự nào

đĩ…Các thanh ghi này được đặt tên theo thứ tự là R0 đến R31. Chúng được chia thành 2 phần, phần 1 bao gồm các thanh ghi từ R0 đến R15 và phần 2 là các thanh ghi R16 đến R31.

Các thanh ghi này cĩ các đặc điểm sau: Được truy cập trực tiếp trong các instruction.

Các tốn tử, phép tốn thực hiện trên các thanh ghi này chỉ cần 1 chu kỳ xung clock.

Register File được kết nối trực tiếp với bộ xử lí trung tâm – CPU của chip. Chúng là nguồn chứa các số hạng trong các phép tốn và cũng là đích chứa kết quả trả lại của phép tốn.

Tĩm lại 32 RF của AVR được xem là 1 phần của CPU, vì thế chúng được CPU sử dụng trực tiếp và nhanh chĩng, để gọi các thanh ghi này, chúng ta khơng cần gọi địa chỉ mà chỉ cần gọi trực tiếp tên của chúng. RF thường được sử dụng như các tốn hạng (operand) của các phép tốn trong lúc lập trình.

Phần 2: là phần nằm ngay sau register file, phần này bao gồm 64 thanh ghi được gọi là 64 thanh ghi nhập/xuất (64 I/O register) hay cịn gọi là vùng nhớ I/O (I/O Memory). Vùng nhớ I/O là cửa ngõ giao tiếp giữa CPU và thiết bị ngoại vi. Tất cả các thanh ghi điều khiển, trạng thái…của thiết bị ngoại vi đều nằm ở đây. Xem lại ví dụ trong bài 1, trong đĩ tơi cĩ đề cập về việc điều khiển các PORT của AVR, mỗi PORT liên quan đến 3 thanh ghi DDRx, PORTx và PINx, tất cả 3 thanh ghi này đều nằm trong vùng nhớ I/O. Xa hơn, nếu muốn truy xuất các thiết bị ngoại vi khác như Timer, chuyển đổi Analog/Digital, giao tiếp USART…Đều thực hiện thơng qua việc điều khiển các thanh ghi trong vùng nhớ này.

Vùng nhớ I/O cĩ thể được truy cập như SRAM hay như các thanh ghi I/O. Nếu sử dụng instruction truy xuất SRAM để truy xuất vùng nhớ này thì địa chỉ của chúng được tính từ 0×0020 đến 0x005F. Nhưng nếu truy xuất như các thanh ghi I/O thì địa chỉ của chúng đựơc tính từ 0×0000 đến 0x003F.

Xét ví dụ instruction OUT dùng xuất giá trị ra các thanh ghi I/O, lệnh này sử dụng địa chỉ kiểu thanh ghi, cấu trúc của lệnh như sau: OUT A, Rr, trong đĩ A là địa chỉ của thanh ghi trong vùng nhớ I/O, Rr là thanh ghi RF, lệnh OUT xuất giá trị từ thanh ghi Rr ra thanh ghi I/O cĩ địa chỉ là A. Giả sử chúng ta muốn xuất giá trị

chứa trong R6 ra thanh ghi điều khiển hướng của PORTD, tức thanh ghi DDRD, địa chỉ tính theo vùng I/O của thanh ghi DDRD là 0×0011, như thế câu lệnh của chúng ta sẽ cĩ dạng: OUT 0×0011, R6. Tuy nhiên trong 1 trường hợp khác, nếu muốn truy xuất DDRD theo dạng SRAM, ví dụ lệnh STS hay LDS, thì phải dùng địa chỉ tuyệt đối của thanh ghi này, tức giá trị 0×0031, khi đĩ lệnh OUT ở trên được viết lại là STS 0×0031, R6.

Để thống nhất cách sử dụng từ ngữ, từ bây giờ chúng ta dùng khái niệm “địa chỉ I/O” cho các thanh ghi trong vùng nhớ I/O để nĩi đến địa chỉ khơng tính phần Register File, khái niệm “địa chỉ bộ nhớ” của thanh ghi là chỉ địa chỉ tuyệt đối của chúng trong SRAM. Ví dụ thanh ghi DDRD cĩ “địa chỉ I/O” là 0×0011 và “địa chỉ bộ nhớ” của nĩ là 0×0031, “địa chỉ bộ nhớ” = “địa chỉ I/O” + 0×0020.

Vì các thanh ghi trong vùng I/O khơng được hiểu theo tên gọi như các Register file, khi lập trình cho các thanh ghi này, người lập trình cần nhớ địa chỉ của từng thanh ghi, đây là việc tương đối khĩ khăn. Tuy nhiên, trong hầu hết các phần mềm lập trình cho AVR, địa chỉ của tất cả các thanh ghi trong vùng I/O đều được định nghĩa trước trong 1 file Definition, bạn chỉ cần đính kèm file này vào chương trình của bạn là cĩ thể truy xuất các thanh ghi với tên gọi của chúng. Giả sử trong ví dụ ở bài 1, để lập trình cho chip Atmega8 bằng AVRStudio, dịng thứ 2 chúng ta sử dụng INCLUDE “M8DEF.INC” để load file định nghĩa cho chip ATMega8, file M8DEF.INC. Vì vậy, trong sau này khi muốn sử dụng thanh ghi DDRD bạn chỉ cần gọi tên của chúng, như: OUT DDRD,R6.

Phần 3: RAM tĩnh, nội (internal SRAM), là vùng khơng gian cho chứa các biến (tạm thời hoặc tồn cục) trong lúc thực thi chương trình, vùng này tương tự các thanh RAM trong máy tính nhưng cĩ dung lượng khá nhỏ (khoảng vài KB, tùy thuộc vào loại chip).

Phần 4: RAM ngoại (external SRAM), các chip AVR cho phép người sử dụng gắn thêm các bộ nhớ ngồi để chứa biến, vùng này thực chất chỉ tồn tại khi nào người sử dụng gắn thêm bộ nhớ ngồi vào chip.

Phần 5: EEPROM (Electrically Ereasable Programmable ROM) là một phần quan trọng của các chip AVR mới, vì là ROM nên bộ nhớ này khơng bị xĩa ngay cả khi khơng cung cấp nguồn nuơi cho chip, rất thích hợp cho các ứng dụng lưu trữ dữ

liệu. Như trong hình 1, phần bộ nhớ EEPROM được tách riêng và cĩ địa chỉ tính từ 0×0000.

Một phần của tài liệu Thiết kế và chế tạo mô hình cửa tự động (Trang 29 - 33)