BÀI 3. TIMER 1. Mục đích • Giúp sinh viên hiểu được các khái niệm về timer và các đặc điểm của bộ định thời trên Board thực tập 2. Yêu cầu • Sau khi thực hiện xong bài thực hành này, sinh viên có khả năng viết các ứng dụng liên quan đến định thời: đếm, đồng hồ,… 3. Lý thuyết • Bộ định thời có những đặc điểm sau: o Bộ đếm 32 bit hay 64 bit. o Có thể đếm theo 2 kiểu: đếm xuống một lần và đếm xuống liên tục. o Timeout có thể là giá trị cố định hay thay đổi được tùy vào việc thiết lập trên SOPC Builder. • Sơ đồ khối của bộ định thời: Hình 1. Sơ đồ khối bộ định thời • Nguyên tắc hoạt động cơ bản: o CPU Nios II truyền giá trị xuống thanh ghi điều khiển để khởi động hay dừng bộ định thời, cho phép hay không cho phép ngắt và qui định chế độ hoạt động (đếm xuống một lần hay đếm xuống liên tục). o CPU đọc giá trị thanh ghi trạng thái (status register) để biết hoạt động của bộ định thời. o CPU có thể qui định thời gian định thời bằng cách truyền giá trị cho thanh ghi chu kỳ (period register). o Một bộ đếm nội đếm xuống. Khi bộ đếm đạt giá trị 0, giá trị trong thanh ghi chu kỳ sẽ được load vào bộ đếm. o CPU có thể đọc giá trị trong bộ đếm tại một thời điểm bằng cách viết một giá trị vào một thanh ghi Snapshot nào đó và đọc tất cả các thanh ghi snapshot để có giá trị đầy đủ. o Một xung báo hiệu hoặc một ngắt được sinh ra khi giá trị bộ đếm đạt giá trị 0. • Các thanh ghi trong bộ định thời (Sinh viên có thể tham khảo thêm theo tài liệu Altera Embedded Peripherals Handbook của hãng Altera): Bảng 1. Thanh ghi trong bộ định thời 32 bit Bảng 2. Thanh ghi trong bộ định thời 64 bit o Thanh ghi trạng thái (Status register) o Thanh ghi điều khiển (Control register) Lưu ý: không được ghi bit 1 vào các bit START và STOP cùng lúc. o Các thanh ghi chu kỳ (Period_n register): các thanh ghi này lưu giá trị để load vào bộ đếm khi một trong các sự kiện sau xảy ra: Bộ đếm đạt giá trị 0. CPU ghi giá trị vào các thanh ghi chu kỳ. o Các thanh ghi giá trị tức thời (Snap_n register): các thanh ghi này lưu giá trị khi CPU muốn đọc giá trị của bộ đếm. • Ngắt: bộ định thời sinh ra ngắt mỗi khi bộ đếm đạt giá trị 0 và bit ITO trong thanh ghi điều khiển được set lên 1. Khi ngắt xảy ra, người lập trình phải xóa bit TO trong thanh ghi trạng thái. Người lập trình có thể không cho phép ngắt bằng cách xóa bit ITO trong thanh ghi điều khiển. 4. Bài tập Lưu ý: Để timer có thể chạy đúng, sinh viên phải thiết lập trong Nios II IDE: • Click chuột phải lên tên project System Library Properties • Thiết lập System Clock Timer và Timestamp timer là none Bài 1. Lập trình để hệ thống đếm lên sau mỗi 1s (Sinh viên phải dùng bộ định thời). Hướng dẫn: sinh viên phải khởi động bộ đếm trước khi xét bit TO và phải xóa bit này sau khi xét. Chương trình mẫu #include<io.h> #define … // timer base #define … // địa chỉ base của led đỏ int main() { unsigned char i; unsigned int j; j = 0; IOWR(timer base, 0, 0x2); // khoi dong timer while(1) { i =IORD(timer base,0); IOWR(địa chỉ base của led đỏ,0,j); if((i&0x1) != 0) { j++; IOWR(timer base, 0, 0x2); // khoi dong timer + xoa bit TO } } return 0; } Bài 2. Sinh viên xây dựng một đồng hồ sử dụng các led 7 đoạn để hiển thị giờ, phút, giây. Hướng dẫn: Giới thiệu thành phần SEG7 (led 7 đoạn trên board thực tập): • Offset tương ứng với thứ tự của các led thành phần. • Sinh viên không thể ghi trực tiếp số muốn hiển thị vào các led 7 đoạn mà phải sử dụng các mã sau Mã Dữ liệu hiển thị Mã Dữ liệu hiển thị 0x3f 0 0x7f 8 0x06 1 0x6f 9 0x5b 2 0x77 A 0x40 3 0x7c B 0x66 4 0x39 C 0x6d 5 0x5e D 0x7d 6 0x79 E 0x07 7 0x71 F •Ví dụ: muốn hiển thị 7 lên led 7 đoạn thứ 0 (HEX0), sinh viên dùng lệnh sau: IOWR(SEG7 base, 0, 0x07 ); . BÀI 3. TIMER 1. Mục đích • Giúp sinh viên hiểu được các khái niệm về timer và các đặc điểm của bộ định thời trên Board thực tập 2. Yêu cầu • Sau khi thực hiện xong bài thực hành. mẫu #include<io.h> #define … // timer base #define … // địa chỉ base của led đỏ int main() { unsigned char i; unsigned int j; j = 0; IOWR (timer base, 0, 0x2); // khoi dong timer while(1) { i =IORD (timer base,0); . khiển. 4. Bài tập Lưu ý: Để timer có thể chạy đúng, sinh viên phải thiết lập trong Nios II IDE: • Click chuột phải lên tên project System Library Properties • Thiết lập System Clock Timer và