Tự học AVR ( Bài 2 - Cấu trúc AVR )

945 1 0
                                    

Bài 2 - Cấu Trúc AVR

Nội dung

Các bài cần tham khảo trước

Giới thiệu.

Tổ chức AVR.

Stack.

Thanh ghi trạng thái.

Ví dụ.

Download ví dụ

Làm quen AVR.

Assembly cho AVR.

AVR Studio.

Mô phỏng với Proteus.

I. Giới thiệu.

Bài này tiếp tục bài đầu tiên trong loạt bài giới thiệu về AVR, nếu sau bài "Làm quen AVR" bạn đã phần nào biết cách lập trình cho AVR bằng AVRStudio thì trong bài này, chúng ta sẽ tìm hiểu kỹ hơn về cấu trúc của AVR. Sau bài này, bạn sẽ:

Hiểu được cấu trúc AVR, cấu trúc bộ nhớ và cách thức hoạt động của chip.

Hiểu về Stack và cách hoạt động.

Biết được một số instruction cơ bản truy xuất bộ nhớ.

Học các instruction rẽ nhánh và vòng lặp.

Chương trình con (Subroutine) và Macro.

Cải tiến ví dụ trong bài 1.

Viết 1 ví dụ minh họa cách sử dụng bộ nhớ và vòng lặp.

II. Tổ chức của 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 1 mô tả cấu trúc bộ nhớ của 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ỉ 0x0000) 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. Xem lại phần đầu của ví dụ trong bài 1:

.ORG 0x000

RJMP BATDAU

.ORG 0x020

Trong ví dụ này, ngay sau khi set vị trí 0x000 bằng chỉ thị (DIRECTIVE) .ORG 0x000 chúng ta dùng instruction RJMP để nhảy đến vị trí 0x020, như thế phần bộ nhớ chương trình từ 0x00 đến 0x01F không được sử dụng (vì trong ví dụ này chúng ta không sử dụng các vector ngắt). Chương trình chính được bắt đầu từ địa chỉ 0x020, con số 0x020 là do người lập trình chọn, thật ra các vector ngắt của chip ATMEGA8 chỉ kéo dài đến địa chỉ 0x012, vì vậy chương trình chính có thể được bắt đầu từ bất cứ vị trí nào sau đó. Để biết độ dài các vector ngắt của từng chip bạn hãy tham khảo datasheet của chip đó.

Tự học AVR ( Bài 1 - Làm quen với AVR )Nơi câu chuyện tồn tại. Hãy khám phá bây giờ