bai2.cau truc avr

51 550 6
bai2.cau truc avr

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Bài - Cấu Trúc AVR       ( 262 Votes ) Nội dung Các cần tham khảo trước Giới thiệu Tổ chức AVR Làm quen AVR Stack Assembly cho AVR Thanh ghi trạng thái AVR Studio Ví dụ Mơ với Proteus Download ví dụ I Giới thiệu Bài tiếp tục loạt giới thiệu AVR, sau "Làm quen AVR" bạn phần biết cách lập trình cho AVR AVRStudio này, tìm hiểu kỹ cấu trúc AVR Sau này, bạn sẽ:  Hiểu cấu trúc AVR, cấu trúc nhớ cách thức hoạt động chip  Hiểu Stack cách hoạt động  Biết số instruction truy xuất nhớ  Học instruction rẽ nhánh vịng lặp  Chương trình (Subroutine) Macro  Cải tiến ví dụ  Viết ví dụ minh họa cách sử dụng nhớ vòng lặp II Tổ chức AVR AVR có cấu trúc Harvard, đường truyền cho nhớ liệu (data memory bus) đường truyền cho nhớ chương trình (program memory bus) tách riêng Data memory bus có bit kết nối với hầu hết thiết bị ngoại vi, với register file Trong program memory bus có độ rộng 16 bits phục vụ cho instruction registers Hình mơ tả cấu trúc nhớ AVR Bộ nhớ chương trình (Program memory): Là nhớ Flash lập trình được, chip AVR cũ (như AT90S1200 hay AT90S2313…) nhớ chương trình gồm phần Application Flash Section chip AVR có thêm phần Boot Flash setion Boot section khảo sát phần sau, nói nhớ chương trình, tự hiểu Application section Thực chất, application section bao gồm phần: phần chứa instruction (mã lệnh cho hoạt động chip) phần chứa vector ngắt (interrupt vectors) Các vector ngắt nằm phần đầu application section (từ địa 0x0000) dài đến 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 load vào phần Xem lại phần đầu ví dụ trongbài 1: ORG 0x000 RJMP BATDAU ORG 0x020 Trong ví dụ này, sau set vị trí 0x000 thị (DIRECTIVE) ORG 0x000 dùng instruction RJMP để nhảy đến vị trí 0x020, phần nhớ chương trình từ 0x00 đến 0x01F khơng sử dụng (vì ví dụ khơng sử dụng vector ngắt) Chương trình địa 0x020, số 0x020 người lập trình chọn, thật vector ngắt chip ATMEGA8 kéo dài đến địa 0x012, chương trình vị trí sau Để biết độ dài vector ngắt chip bạn tham khảo datasheet chip Vì chức nhớ chương trình chứa instruction, khơng có nhiều hội tác động lên nhớ lập trình cho chip, người lập trình AVR, nhớ “khơng q quan trọng” Tất ghi quan trọng cần khảo sát nằm nhớ liệu chip Hình Tổ chức nhớ AVR Bộ nhớ liệu (data memory): Đây phần chứa ghi quan trọng chip, việc lập trình cho chip phần lớn truy cập nhớ Bộ nhớ liệu chip AVR có độ lớn khác tùy theo chip, nhiên phần nhớ chia thành phần: Phần 1: phần nhớ liệu, mơ tả hình 1, phần bao gồm 32 ghi có tên gọi register file (RF), hay General Purpose Rgegister – GPR, đơn giản Thanh ghi Tất ghi ghi bits hình Hình Thanh ghi bits Tất chip họ AVR bao gồm 32 ghi Register File có địa tuyệt đối từ 0x0000 đến 0x001F Mỗi ghi chứa giá trị dương từ đến 255 giá trị có dấu từ -128 đến 127 mã ASCII ký tự đó…Các ghi đặt tên theo thứ tự R0 đến R31 Chúng chia thành phần, phần bao gồm ghi từ R0 đến R15 phần ghi R16 đến R31 Các ghi có đặc điểm sau:  Được truy cập trực tiếp instruction  Các toán tử, phép toán thực ghi cần chu kỳ xung clock  Register File kết nối trực tiếp với xử lí trung tâm – CPU chip  Chúng nguồn chứa số hạng phép toán đích chứa kết trả lại phép tốn Để minh họa, xét ví dụ thực phép cộng ghi instruction ADD sau: ADD R1, R2 Bạn thấy dòng lệnh trên, ghi R1 R2 sử dụng trực tiếp với tên chúng, dòng lệnh dịch sang opcode để download vào chip có dạng: 0000110000010010 00001=1 tức ghi R1 00010 = ghi R2 Sau phép cộng, kết lưu vào ghi R1 Tất instruction sử dụng RF làm tốn hạng truy nhập tất RF cách trực tiếp chu kỳ xung clock, ngoại trừ SBCI, SUBI, CPI, ANDI LDI, instruction truy nhập ghi từ R16 đến R31 Thanh ghi R0 ghi sử dụng instruction LPM (Load Program Memory) Các ghi R26, R27, R28, R29, R30 R31 chức thơng thường cịn sử dụng trỏ (Pointer register) số instruction truy xuất gián tiếp Chúng ta khảo sát vấn đề trỏ sau Hình mơ tả chức phụ ghi Hình Register file Tóm lại 32 RF AVR xem phần CPU, chúng CPU sử dụng trực tiếp nhanh chóng, để gọi ghi này, không cần gọi địa mà cần gọi trực tiếp tên chúng RF thường sử dụng toán hạng (operand) phép toán lúc lập trình Phần 2: phần nằm sau register file, phần bao gồm 64 ghi gọi 64 ghi nhập/xuất (64 I/O register) hay gọi vùng nhớ I/O (I/O Memory) Vùng nhớ I/O cửa ngõ giao tiếp CPU thiết bị ngoại vi Tất ghi điều khiển, trạng thái…của thiết bị ngoại vi nằm Xem lại ví dụ 1, tơi có đề cập việc điều khiển PORT AVR, PORT liên quan đến ghi DDRx, PORTx PINx, tất ghi nằm vùng nhớ I/O Xa hơn, muốn truy xuất thiết bị ngoại vi khác Timer, chuyển đổi Analog/Digital, giao tiếp USART…đều thực thông qua việc điều khiển ghi vùng nhớ Vùng nhớ I/O truy cập SRAM hay ghi I/O Nếu sử dụng instruction truy xuất SRAM để truy xuất vùng nhớ địa chúng tính từ 0x0020 đến 0x005F Nhưng truy xuất ghi I/O địa chúng đựơc tính từ 0x0000 đến 0x003F Xét ví dụ instruction OUT dùng xuất giá trị ghi I/O, lệnh sử dụng địa kiểu ghi, cấu trúc lệnh sau: OUT A, Rr, A địa ghi vùng nhớ I/O, Rr ghi RF, lệnh OUT xuất giá trị từ ghi Rr ghi I/O có địa A Giả sử muốn xuất giá trị chứa R6 ghi điều khiển hướng PORTD, tức ghi DDRD, địa tính theo vùng I/O ghi DDRD 0x0011, câu lệnh có dạng: OUT 0x0011, R6 Tuy nhiên trường hợp khác, muốn truy xuất DDRD theo dạng SRAM, ví dụ lệnh STS hay LDS, phải dùng địa tuyệt đối ghi này, tức giá trị 0x0031, lệnh OUT viết lại STS 0x0031, R6 Để thống cách sử dụng từ ngữ, từ dùng khái niệm “địa I/O” cho ghi vùng nhớ I/O để nói đến địa khơng tính phần Register File, khái niệm “địa nhớ” ghi địa tuyệt đối chúng SRAM Ví dụ ghi DDRD có “địa I/O” 0x0011 “địa nhớ” 0x0031, “địa nhớ” = “địa I/O” + 0x0020 Vì ghi vùng I/O khơng hiểu theo tên gọi Register file, lập trình cho ghi này, người lập trình cần nhớ địa ghi, việc tương đối khó khăn Tuy nhiên, hầu hết phần mềm lập trình cho AVR, địa tất ghi vùng I/O định nghĩa trước file Definition, bạn cần đính kèm file vào chương trình bạn truy xuất ghi với tên gọi chúng Giả sử ví dụ 1, để lập trình cho chip Atmega8 AVRStudio, dịng thứ sử dụng INCLUDE "M8DEF.INC" để load file định nghĩa cho chip ATMega8, file M8DEF.INC Vì vậy, sau muốn sử dụng ghi DDRD bạn cần gọi tên chúng, như: OUT DDRD,R6 Phần 3: RAM tĩnh, nội (internal SRAM), vùng không gian cho chứa biến (tạm thời toàn cục) lúc thực thi chương trình, vùng tương tự RAM máy tính có dung lượng nhỏ (khoảng vài KB, tùy thuộc vào loại chip) Phần 4: RAM ngoại (external SRAM), chip AVR cho phép người sử dụng gắn thêm nhớ để chứa biến, vùng thực chất tồn người sử dụng gắn thêm nhớ vào chip Phần 5: EEPROM (Electrically Ereasable Programmable ROM) phần quan trọng chip AVR mới, ROM nên nhớ khơng bị xóa khơng cung cấp nguồn ni cho chip, thích hợp cho ứng dụng lưu trữ liệu Như hình 1, phần nhớ EEPROM tách riêng có địa tính từ 0x0000 Câu hỏi AVR hoạt động nào? Hình biểu diễn cấu bên AVR Bạn thấy 32 ghi Register File kết nối trực tiếp với Arithmetic Logic Unit -ALU (ALU xem CPU AVR) line, ALU truy xuất trực tiếp lúc ghi RF chu kỳ xung clock (vùng khoanh trịn màu đỏ hình 4) Hình Cấu trúc bên AVR Các instruction chứa nhớ chương trình Flash memory dạng ghi 16 bit Bộ nhớ chương trình truy cập chu kỳ xung clock instruction chứa program memory load vào instruction register, instruction register tác động lựa chọn register file RAM cho ALU thực thi Trong lúc thực thi chương trình, địa dịng lệnh thực thi định đếm chương trình – PC (Program counter) Đó cách thức hoạt động AVR AVR có ưu điểm hầu hết instruction thực thi chu kỳ xung clock, nguồn clock lớn cho AVR nhỏ số vi điều khiển khác PIC thời gian thực thi nhanh III Stack Stack hiểu “tháp” liệu, liệu chứa vào stack đỉnh “tháp” liệu lấy từ đỉnh Kiểu truy cập liệu stack gọi LIFO (Last In First Out – vào sau trước) Hình thể cách truy cập liệu stack Hình Stack Khái niệm cách thức hoạt động stack áp dụng cho AVR, cách khai báo vùng nhớ SRAM stack ta sử dụng vùng nhớ stack thực thụ Để khai báo vùng SRAM làm stack cần xác lập địa đầu stack cách xác lập trỏ stack-SP (Stack Pointer) SP trỏ 16 bit bao gồm ghi bit SPL SPH (chữ L LOW ghi mang giá trị byte thấp SP, H = HIGH), SPL SPH nằm vùng nhớ I/O Giá trị gán cho ghi SP địa khởi động stack Quay lại ví dụ 1, phần khởi tạo điều kiện đầu ; KHOI TAO CÁC DIEU KIEN DAU LDI R16, HIGH(RAMEND) LDI R17, LOW(RAMEND) OUT SPH, R16 OUT SPL, R17 Bốn dịng khai báo mục đích gán giá trị RAMEND cho trỏ SP, RAMEND (tức End of Ram) biến chứa địa lớn RAM nội AVR, biến định nghĩa file M8DEF.INC Như sau dòng trên, trỏ SP chứa giá trị cuối SRAM hay nói cách khác vùng stack vị trí cuối nhớ SRAM Nhưng vị trí cuối mà khơng giá trị khác Có thể giải thích sau: stack AVR hoạt động từ xuống, sau liệu đẩy vào stack, SP giảm giá trị khởi động SP vị trí cuối SRAM tránh việc liệu ghi đè Bạn khởi động stack với địa khác, nhiên lý an tồn, nên khởi động stack RAMEND Hai instruction dùng cho truy cập stack PUSH POP, PUSH dùng đẩy liệu vào stack POP dùng lấy liệu khỏi stack Dữ liệu đẩy vào lấy khỏi stack vị trí mà trỏ SP trỏ đến Ví dụ cho chip ATMega8, RAMEND=0x045F, sau khởi động, trỏ SP trỏ đến vị trí 0x045F SRAM, ta viết câu lệnh sau: LDI R16, PUSH R16 LDI R16, PUSH R16 LDI R16, PUSH R16 Khi nội dung stack hình Hình Nội dung stack ví dụ Sau lần PUSH liệu, SP giảm đơn vị trỏ vào vị trí ... bên AVR Các instruction chứa nhớ chương trình Flash memory dạng ghi 16 bit Bộ nhớ chương trình truy cập chu kỳ xung clock instruction chứa program memory load vào instruction register, instruction... button) Hình Ví dụ cho Sử dụng AVRStudio tạo project với tên gọi avr2 (xem lại cách tạo Project AVRStudio) Viết lại phần code bên vào vào file avr2 .asm List Ví dụ cấu trúc AVR 10 11 12 13 14 15 16... trình – PC (Program counter) Đó cách thức hoạt động AVR AVR có ưu điểm hầu hết instruction thực thi chu kỳ xung clock, nguồn clock lớn cho AVR nhỏ số vi điều khiển khác PIC thời gian thực thi

Ngày đăng: 14/03/2013, 21:21

Hình ảnh liên quan

Hình 1. Tổ chức bộ nhớ của AVR. - bai2.cau truc avr

Hình 1..

Tổ chức bộ nhớ của AVR Xem tại trang 3 của tài liệu.
Hình 3. Register file. - bai2.cau truc avr

Hình 3..

Register file Xem tại trang 5 của tài liệu.
Hình 4. Cấu trúc bên trong AVR. - bai2.cau truc avr

Hình 4..

Cấu trúc bên trong AVR Xem tại trang 8 của tài liệu.
Hình 5. Stack. - bai2.cau truc avr

Hình 5..

Stack Xem tại trang 9 của tài liệu.
Khi đó nội dung của stack sẽ như trong hình 6. - bai2.cau truc avr

hi.

đó nội dung của stack sẽ như trong hình 6 Xem tại trang 10 của tài liệu.
IV. Macro và chương trình con. - bai2.cau truc avr

acro.

và chương trình con Xem tại trang 14 của tài liệu.
Hình 8. Ảnh hưởng của các phép toán lên SREG. - bai2.cau truc avr

Hình 8..

Ảnh hưởng của các phép toán lên SREG Xem tại trang 14 của tài liệu.
Hình 9. Ví dụ cho bài 2. - bai2.cau truc avr

Hình 9..

Ví dụ cho bài 2 Xem tại trang 17 của tài liệu.
Hình 10. Cấu trúc chân trong PORT của AVR. - bai2.cau truc avr

Hình 10..

Cấu trúc chân trong PORT của AVR Xem tại trang 20 của tài liệu.
Hình 1. Icons trên Desktop - bai2.cau truc avr

Hình 1..

Icons trên Desktop Xem tại trang 45 của tài liệu.
Hình 3. Option cho pn. - bai2.cau truc avr

Hình 3..

Option cho pn Xem tại trang 46 của tài liệu.
Hình 4. Add chức năng tạo file COFF cho pn. - bai2.cau truc avr

Hình 4..

Add chức năng tạo file COFF cho pn Xem tại trang 47 của tài liệu.
Hình 5. Add chức năng Make và Program cho pn. - bai2.cau truc avr

Hình 5..

Add chức năng Make và Program cho pn Xem tại trang 48 của tài liệu.
Hình 7. Chương trình tiện ích MFile. - bai2.cau truc avr

Hình 7..

Chương trình tiện ích MFile Xem tại trang 50 của tài liệu.

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan