Hệ thống nhúng slide b4

24 42 0
Hệ thống nhúng slide b4

Đ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

13:15:17 BÀI 4: THIẾT KẾ HỆ THỐNG NHÚNG TRÊN KIT DE-2 Hệ thống nhúng DE-2 Thiết kế phần cứng cho kit DE-2 dùng Qsys Tích hợp phần cứng vào Quartus Project Thiết kế phần mềm dùng Nios II Software Các ngoại vi bản: công tắc nhấn, LCD, … Bài 13:15:17 Bài 13:21:53 Hệ thống nhúng DE-2 Bài 13:21:53 CPU Nios II Bài 4 13:21:53 CPU Nios II clk, reset_n: nối với clk reset nguồn xung clock data_master: kết nối với chân slave nhớ ngoại vi instruction_master: kết nối với slave nhớ Bài 13:21:53 Bộ nhớ on-chip clk1: nối với clk nguồn xung clock reset1: nối với reset nguồn xung clock s1: kết nối với data instruction CPU Nios II Bài 13:21:53 Ngoại vi clk: nối với clk nguồn xung clock reset: nối với reset nguồn xung clock s1: kết nối với data CPU Nios II external_connection: kết nối với chân kit DE-2 Bài 13:21:53 Kiểm tra clk: nối với clk nguồn xung clock reset: nối với reset nguồn xung clock Control_slave: kết nối với data CPU Nios II Bài 13:21:53 Qsys Thiết kế hệ thống sau: Phần cứng: - - Nhấn SW1: Led sáng dần - Nhấn SW2: tắt tất Led Clock CPU Nios II On-chip memory PIO1: input, Width = PIO2:output, Width = System ID Bài 13:21:53 Qsys B1: Khởi động Quartus, chọn File > New Project Wizard: Bài 10 13:21:53 B2: Chọn Family Cyclone II, chọn Available devices EP2C35F672C6  Finish Bài 11 13:21:53 B3: Chọn Tools > Qsys menu hay click biểu tượng Qsys công cụ Bài 12 13:21:53 Nguồn xung clock có sẵn hệ thống: Bổ sung CPU Nios II: - Double-click vào Nio II Processsor - Chọn Nios II core Nios II/e - Nhấn Finish Bài Bổ sung on-chip memory 32KB: 13 13:21:53 Bổ sung PIO input bit (SW) PIO output bit (Led): Bài 14 13:21:53 Đặt tên lại cho Component: click chuột phải vào Component, chọn Rename Bài 15 13:21:53 Kết nối chân Component: - Clk clk_main với clk component khác - Clk_reset clk_main với reset component khác - Data_master CPU Nios II với slave (s1) component khác (trừ clk_main) - Instruction_master CPU Nios II với slave (s1) memory (RAM) Back >> Bài 16 13:21:53 Gán địa sở cho thành phần: Double-click vào CPU Nios II: chọn Reset Vector Exception Vector Bài 17 13:21:53 Double-click vào cột Export hàng external_connection sw: Tương tự cho component led: Bài 18 13:21:53 Chọn File > Save Chọn tab Generation, sau nhấn Generate Bài 19 13:21:53 Tích hợp vào Quartus Project B1: Quay lại Quartus, chọn Project > Add/Remove Files in Project B2: Nhấp vào nút Browse (…) Bài 20 10 13:21:53 B3: Chọn thư mục synthesis, phần File name, chọn All Files, chọn file qip Nhấn Open, sau nhấn OK Bài 21 13:21:53 B4: Trong cửa số Project Navigator, chọn tab Files, nhấn chuột phải vào file qip chọn Set as Top-Level Entity B5: Chọn menu Processing > Start Compilation hay nhấn nút Start Compilation công cụ Bài 22 11 13:21:53 Kết sau biên dịch: B6: Thực gán chân kit DE-2: - SW: nối với toggle switch SW0, SW1 - Led: nối với LEDR0 - CLOCK_50,PIN_N2 SW[0],PIN_N25 SW[1],PIN_N26 LEDR[0],PIN_AE23 LEDR[1],PIN_AF23 LEDR[2],PIN_AB21 LEDR[3],PIN_AC22 LEDR[4],PIN_AD22 LEDR[5],PIN_AD23 LEDR[6],PIN_AD21 LEDR[7],PIN_AC21 Bài 23 13:21:53 Gán chân sơ đồ chân: Xem sơ đồ chân (file DE2_pin_assigments.csv): https://sites.google.com/site/phkkhanh/thuc-hanh/he-thong-nhung B6.1: Chọn menu Assigments > Pin Planner Bài 24 12 13:21:53 B6.2: Double-click vào cột Location gán cho chân kit DE-2: CLOCK_50,PIN_N2 LEDR[0],PIN_AE23 LEDR[1],PIN_AF23 LEDR[2],PIN_AB21 LEDR[3],PIN_AC22 LEDR[4],PIN_AD22 LEDR[5],PIN_AD23 LEDR[6],PIN_AD21 LEDR[7],PIN_AC21 SW[0],PIN_N25 SW[1],PIN_N26 Đóng cửa sổ Pin Planner Bài 25 13:21:53 Gán chân sơ đồ khối: B6.1: Chọn menu File > New, chọn Block Diagram/Schematic File B6.2: Bấm vào Symbol Tool công cụ Bài 26 13 13:21:53 B6.3: Trong khung Libraries, bấm vào Project chọn tên tương ứng Nhấn chuột phải chọn Generate Pins for Symbols Ports Bài 27 13:21:53 B6.4: Chọn File > Save để lưu sơ đồ chọn Processing > Start Compilation để biên dịch B6.5: Chọn menu Assignments > Import Assignments, đến file DE2_pin_assignments.csv B6.6: Gán chân, sau chọn File > Save để lưu Set as Top-Level Entity cho file bdf Bài 28 14 13:21:53 B7: Thực biên dịch lại (chọn menu Processing > Start Compilation) B8: Nạp phần cứng Chọn menu Tools > Programmer, bấm vào nút Hardware Setup góc bên trái chọn USB-Blaster Trong cửa sổ Programmer phải có tên file sof (nếu chưa có nhấn vào nút Add File để thêm vào) Gạt nút RUN / PROG kit DE2 (nằm bên trái LCD) sang RUN nhấn vào Start để cấu hình cho DE2 Bài 29 13:21:53 Xây dựng phần mềm Chọn menu Tools > Nios II Software Build Tools for Eclipse Bài 30 15 13:21:53 Chọn Workspace, ví dụ E:\Altera\Eclipse Trong Eclipse, chọn menu File > New > Nios II Application and BSP from Template Bài 31 13:21:53 Trong SOPC Information File name, chọn file sopcinfo project Đặt tên cho project, chọn Project Template Hello World Nhấn Finish Bài 32 16 13:21:53 Chọn menu File > New > Nios II Application Đặt tên Project, nhấn vào nút Browse (…) để chọn BSP Nhấn Finish Bài Nhấn chuột phải vào project tạo cửa sổ Project Explorer 33 13:21:53 Nhấn chuột phải vào project tạo cửa sổ Project Explorer, chọn New > Source File Bài 34 17 Nhập tên file (main.c), phần Template, chọn Default C 13:21:53 source template Nhập đoạn mã sau: #include "io.h" #include "system.h" int main() { unsigned char sw; while (1) { sw = IORD(SW_BASE, 0); if (sw == 0x01) // SW0 on, SW1: off IOWR(LED_BASE,0,0xFF); else IOWR(LED_BASE,0,0x00); } return 0; Bài } 35 13:21:53 Nhấn Ctrl-S để lưu mã lệnh Nhấn chuột phải vào sw2_led8_board, chọn Run As > Nios II Hardware Bài 36 18 Chọn tab Target Connection, nhấn vào System ID 13:21:53 Properties để kiểm tra trạng thái hệ thống (có thể Refresh Connections trước) Bài Click chọn vào check box Ignore mismatched system ID 37 13:21:53 Ignore mismatched system timestamp Nhấn Apply sau nhấn Run Gạt cơng tắc toggle SW[0] on SW[1] off -> Led Red sáng Khác: Led tắt Bài 38 19 13:21:53 Gạt công tắc toggle SW[0] on SW[1] off -> Led Red sáng Khác: Led tắt IORD(SW_BASE, #include "io.h" #include "system.h" 0): đọc giá trị từ thiết bị ngoại vi SW_BASE: địa thiết bị, đăt int main() tên thiết kế phần cứng (Qsys) { unsigned char s; 0: địa offset while (1) { s = IORD(SW_BASE, 0); IOWR(LED_BASE,0,0xFF): xuất if (s == 0x01) giá trị 0xFF thiết bị // SW0 on, SW1: off ngoại vi, địa LED_BASE IOWR(LED_BASE,0,0xFF); else IOWR(LED_BASE,0,0x00); } return 0; Bài 39 } 13:21:53 4.1 Viết mã lệnh theo yêu cầu: - SW1 on: Led sáng dần từ LEDR[0] – LEDR[7], thời gian delay 300 ms (dùng hàm usleep để delay, vd: usleep(1000) delay ms) - SW0 off: dừng trình chạy Led 4.2 Thiết kế hệ thống nhúng mô đèn giao thông đơn giản: công tắc on/off tồn hệ thống, cơng tắc chọn chế độ hoạt động bình thường / đèn vàng nhấp nháy, Led tương ứng Led xanh, vàng đỏ Thiết kế phần cứng Qsys Thiết kế sơ đồ chân hay sơ đồ khối Quartus Viết phần mềm điều khiển Bài 40 20 13:21:53 Công tắc nhấn (pushbutton) Bài 41 13:21:53 Yêu cầu: - Nhấn KEY0: sáng dần từ LEDG0 – LEDG7, lặp lại trình liên tục - Nhấn KEY0 lần nữa: dừng trình Bài 42 21 13:21:53 #include "io.h" #include "system.h" int main() { unsigned char unsigned char unsigned char 0x07 ,0x0F, 0x1F, push; push_check = 0; led[8] = {0x01, 0x03, 0x3F, 0x7F,0xFF}; unsigned char cnt = 0; while (1) { push = IORD(PUSH_BASE,0); if (push == 1) { if (push_check == 1) push_check = 0; else push_check = 1; while (push == 1) push = IORD(PUSH_BASE,0); } if (push_check == 1) { IOWR(LED_BASE,0,led[cnt]); cnt++; if (cnt == 8) cnt = 0; usleep(200000); } } return 0; } Bài 43 13:21:53 4.3 Thiết kế hệ thống nhúng mô đồng hồ số đơn giản: hiển thị giờ, phút, giây Led đoạn, công tắc nhấn chỉnh giờ, công tắc nhấn chỉnh phút Thiết kế phần cứng Qsys Thiết kế sơ đồ chân hay sơ đồ khối Quartus Viết phần mềm điều khiển Bài 44 22 13:21:53 LCD B1: Thiết kế Qsys: Bài 45 13:21:53 LCD B2: Thiết kế sơ đồ khối Quartus: Bài 46 23 13:21:53 LCD B3: Viết phần mềm: void lcd_init(void); void lcd_test(void); int main() { IOWR(LED_LCD_BASE,0,3); lcd_init(); lcd_test(); while (1) ; return 0; } void lcd_init(void) { IOWR(LCD_BASE,0,0x38);usleep(4100); IOWR(LCD_BASE0,0,0x0C);usleep(100); IOWR(LCD_BASE0,0,0x06);usleep(100); IOWR(LCD_BASE0,0,0x01);usleep(100); IOWR(LCD_BASE0,0,0x02);usleep(100); } void lcd_test(void) { int i; char line1[17] = “VIEN KT HUTECH \0"; char line2[15] = “BM DTU TR THONG \0"; for(i = 0; line1[i] != 0; i++) { IOWR (LCD_BASE,2,line1[i]);usleep(100); } IOWR(LCD_BASE0,0,0xC0);usleep(100); for(i = 0; line2[i] != 0; i++) { IOWR (LCD_BASE,2,line2[i]);usleep(100); } } Bài 47 13:21:53 LCD 4.4 Viết mã lệnh theo yêu cầu: - Dòng 1: Counter = xxx - Dòng 2: Counter = yyy - Nhấn KEY0: tăng giá trị xxx từ 123 – 456 - Nhấn KEY1: giảm giá trị yyy từ 456 – 123 Bài 48 24

Ngày đăng: 24/10/2020, 08:31

Từ khóa liên quan

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

  • Đang cập nhật ...

Tài liệu liên quan