BÀI THÍ NGHIỆM SỐ 3: CHƯƠNG TRÌNH ĐIỀU KHIỂN XUẤT/ NHẬP

Một phần của tài liệu thực hiện các ứng dụng nhúng cơ bản trên board altera de2 115 (Trang 59 - 68)

NHẬP

Mục đích:

 Nghiên cứu sử dụng các thiết bị, các khả năng cung cấp ngõ vào và ngõ ra cho bộ xử lý và được điều khiển bằng phần mềm.

Yêu cầu:

 Tạo ra một hệ thống gồm: CPU, RAM, New_number (PIO 1), Green_LEDs (PIO 2), Red_LEDs (PIO 3) , System ID.

 Viết chương trình đọc nội dung của Switches, hiển thị giá trị tương ứng lên LED xanh, tích lũy các lần cộng và hiển thị tổng lên LED đỏ.  Viết chương trình cộng số kế tiếp.

3.3.1 Sơ đồ hệ thống Nios II Nios II Processor JTAG Debug Module JTAG UART Interface

Avalon Switch fabric

On-chip Memory LEDR parallel output interface CYCLONE IV E FPGA CHIP Host Computer USB-Blaster Interface Reset_n Clock Switches parallel input interface LEDG parallel output interface

SW7SW0 LEDR15LEDR0 LEDG7LEDG0

49

3.3.2 Lưu đồ giải thuật

Hình 3.27 Lưu đồ giải thuật (giá trị nhập được lưu vào r16 và cộng dồn vào giá trị đang có tại r17, lưu kết quả tại r17)

Bắt đầu

Khởi tạo các thanh ghi chứa giá trị SW, LED, thanh ghi để tính toán

Hiển thị giá trị của SW ra LED xanh

Cộng giá trị SW với giá trị thanh ghi kết quả Nhận giá trị SW

Gán giá trị thanh ghi lưu kết quả =0

Hiển thị giá trị kết quả ra LED đỏ

50

3.3.3 Các bước thực hiện và kết quả

Tạo hệ thống phần cứng:

a)Tạo project mới có tên là Lab4 bằng phần mềm Quartus II 11.0.

b)Trong cửa sổ project Lab4 tạo một hệ thống QSys mới gồm các thành phần CPU (Nios II Processor), RAM (on-chip memory), system ID, New_number (PIO), Green_LEDs (PIO), Red_LEDs (PIO).

Hình 3.28 Lưu đồ giải thuật Bắt đầu

Đưa giá trị địa chỉ BUTTON, Switches, LED xanh, LED đỏ vào các thanh ghi

Xóa một thanh ghi để chứa giá trị kết quả

Nạp giá trị của BUTTON vào thanh ghi thứ 1

Nạp giá trị Switches mới vào thanh ghi thứ 2

Xuất giá trị thanh ghi chứa giá trị Switches ra LED xanh

Giá trị BUTTON = 0 ? (adsbygoogle = window.adsbygoogle || []).push({});

Nạp lại giá trị của BUTTON vào thanh ghi thứ 1

Cộng giá trị Switches mới với giá trị thanh ghi kết quả ban đầu và lưu lại

Kiểm tra lại giá trị BUTTON với 0?

Đ S

Đ

S

51  CPU (Nios II Processor):

o Chọn “Nios II/s”, JTAG Debug Module Level 1. o Đổi tên Nios thành “CPU”.

 RAM (On-Chip Memory):

o Total Memory size = “32768”.

o Đổi tên “on-chip memory” thành “RAM”.  New_number (PIO):

o Trong “Basic Settings” nhập giá trị là “8” vào ô “Width”, chọn “Input” trong “Direction” để thiết lập thành phần PIO được tạo ra để làm ngõ vào dữ liệu được nhập từ Switch.

o Đổi tên thành “New_number”.  Green_LEDs (PIO):

o Trong “Basic Settings” nhập giá trị là “8” vào ô “Width”, chọn “Output” trong “Direction” để thiết lập thành phần PIO được tạo ra để làm ngõ ra hiển thị trên LED xanh.

o Đổi tên thành “Green_LEDs”.  Red_LEDs (PIO):

o Trong “Basic Settings” nhập giá trị là “16” vào ô “Width”, chọn “Output” trong “Direction” để thiết lập thành phần PIO được tạo ra để làm ngõ ra hiển thị trên LED đỏ.

o Đổi tên thành “Red_LEDs”.  System ID Peripheral:

o Không thay đổi các thiết lập mặc định. o Đổi tên thành “sysid”.

c) Ở cột “Connections”: Kết nối các thành phần lại với nhau. o Kết nối các thành phần đã tạo với nguồn xung clk.

o Kết nối Avalon memory mapped slave trong CPU với Avalon memory mapped slave trong On-chip memory.

o Mở lại thành phần CPU và đổi “reset vector and exception vector” thành “RAM.s1”.

d)Generate

52 o Nhấp vào Generate.

Hệ thống QSys hoàn chỉnh như hình sau:

Hình 3.29 Sơ đồ hệ thống

Thực hiện gán chân cho hệ thống tương tự như ở hướng dẫn (chương 2).

Hình 3.30 Sơ đồ khối hệ thống hoàn tất.

Lưu lại và thực hiện biên dịch, kiểm tra lỗi cho hệ thống.

Sau khi nạp thành công hệ thống xuống board DE2-115, ta sử dụng phầm mềm Altera Monitor Program để viết chương trình ứng dụng cho hệ thống.

53 (adsbygoogle = window.adsbygoogle || []).push({});

Viết chương trình ứng dụng cho hệ thống phần cứng bằng phần mềm Altera Monitor Program:

Tạo file Lab4.equ.s:

.equ NEW_NUMBER, 0x10000040 .equ GREEN_LEDS, 0x10000010 .equ RED_LEDS, 0x10000000 File Lab4.s: .include "nios_macros.s" .include "Lab4.equ.s" .text .global _start _start: add r17, r0, r0 movia r8, NEW_NUMBER /* SW

slider switch base address */

movia r9, GREEN_LEDS /* green

LED base address */

movia r10, RED_LEDS /* red LED

base address */ MAIN_LOOP:

ldwio r16, 0(r8) /*

load slider switches */

stwio r16, 0(r9) /*

write to green LEDs */

add r17, r17, r16

stwio r17, 0(r10) /*

write to red LEDs */

br MAIN_LOOP

54

Các bước thực hiện chương trình với Altera Monitor Program như sau:

Đặt tên cho dự án mới là Lab4, thực hiện tương tự các bước như ở bài thí nghiệm số 2. Sau đó tiến hành biên dịch và nạp chương trình .

Hình 3.31 Giao diện sau khi nạp chương trình ứng dụng

Khi nhập số 1 từ Switches sẽ được lưu vào thanh ghi r16, giá trị thanh ghi r16 cộng với giá trị trong thanh ghi r17 (ban đầu là 0), sau đó lưu kết quả nhận được có giá trị là 1 vào thanh ghi r17.

Hình 3.32 Kết quả chạy chương trình khi cho 0+1

Khi nhập số 129 từ Switches sẽ được lưu vào thanh ghi r16, giá trị thanh ghi r16 cộng với giá trị trong thanh ghi r17 (giá tri là 1), sau đó lưu kết quả nhận được có giá trị là 82 vào thanh ghi r17.

55

Hình 3.33 Kết quả chạy chương trình cho 1+129

Cộng sử dụng pushbutton: Lab4_Bai2.equ.s .equ NEW_NUMBER, 0x10000040 .equ GREEN_LEDS, 0x10000010 .equ RED_LEDS, 0x1000000 .equ STATUS_FLAG, 0x10000050 Lab4_Bai2.s: .include "nios_macros.s" .include "Lab4_Bai2.equ.s" .text .global _start _start: movia r17, 0 add r17, r0, r0 movia r8, NEW_NUMBER movia r9, GREEN_LEDS movia r10, RED_LEDS MAIN_LOOP: ldwio r16, 0(r8)

56 stwio r16, 0(r9) add r17, r17, r16 stwio r17, 0(r10) br MAIN_LOOP .end

Khi nhập số 8 từ Switches sẽ được lưu vào thanh ghi r16

Hình 3.34 Lưu giá trị 8 vào thanh ghi r16

Khi ta ấn key0 sẽ cộng dồn kết quả vừa ấn với thanh ghi r16, kết quả sẽ được lưu vào thanh ghi r17. (adsbygoogle = window.adsbygoogle || []).push({});

57

Một phần của tài liệu thực hiện các ứng dụng nhúng cơ bản trên board altera de2 115 (Trang 59 - 68)