Chương 1: GIỚI THIỆU VỀ CHIP FPGA VÀ NGÔN NGỮ ĐẶC TẢ PHẦN
CỨNG VHDL .1
1.1 KHÁI QUÁT VỀ CHIP FPGA: .1
1.1.1 Khái niệm: .1
1.1.2 Ứng dụng: .2
1.2 NGÔN NGỮ ĐẶC TẢ PHẦN CỨNG VHDL: .2
1.2.1 Giới thiệu: .2
1.2.2 Cấu trúc một file VHDL: .3
1.2.3 Cấu trúc từ vựng: .4
1.2.4 Các đối tượ ng dữ liệu trong VHDL: .5
1.2.5 Kiểu dữ liệu: .6
1.2.6 Các lệ nh tuần tự: .10
Chương 2: C ẤU TRÚC KIT SP ARTANT-3 E, VI ĐIỀU KHIỂN MICROB LAZE
VÀ PHẦN MỀM EDK CỦA HÃNG XILINK .14
2.1 CẤU TRÚC KIT SP ARTANT–3E CỦA XILINX: .14
2.1.1 Các thành phần c hính của kit SP ARTANT – 3E: .14
2.1.2 Bộ tạo xung clock cho FPGA: .15
2.1.3 Các nút chuyển nút nhấn và Led: .15
2.1.4 Khối LCD: .17
2.1.5 Bộ biến đổi tương t ự sang số:.18
2.2 VI ĐIỀU KHIỂN NHÚNG MICROBLAZE: .23
2.2.1 Giới thiệu v ề vi điều khiển Microblaze: .23
2.2.2 Kiến trúc cơ bản của MicrroBlaze: .24
2.2.3 Kiến trúc Pipeline c ủa vi điều khiển MicroBlaze: .25
2.2.4 Giao tiếp tính hiệ u trong MicroBlaze: .25
2.3 PH Ầ N MỀM EDK: .27
2.3.1 Giới thiệu Phần mềm EDK: .27
2.3.2 Các t ập lệnh trong EDK: .27
2.3.3 Các h t ạo Project v ới ph ần mề m EDK: .32
Chương 3: PH ẦN MỀM VB VÀ G IAO DIỆN ĐIỀU KHIỂN .39
3.1 GIỚI THI ỆU VỀ NGÔN NGỮ LẬ P TRÌNH VB.NET: .39
3.2 LẬ P TRÌNH GIAO TIẾP CỔNG NỐI TIẾP VB.NET: .39
3.2.1 T ự động dò tìm cổng COM: .39
3.2.2 Đóng m ở cổng COM: .39
3.2.3 Nhận dữ liệu từ cổng COM: .40
3.2.4 Gửi dữ liệu ra cổng COM: .40
3.2.5 Cài đ ặt tham s ố cho cổng COM: .41
3.2.6 Viết chươ ng trình: .41
Chương 4: TRIỂN KHAI XÂY DỰNG HỆ THỐNG NHÚNG TRÊN KIT
SP ARTANT 3 E .53
4.1 SƠ ĐỒ TỔNG QUÁT VỀ ỨNG DỤNG NHÚNG: .53
4.2 XÂY D ỰNG CÁC CHIP NHÚNG: .54
4.2.1 Khối cảm biến nhiệt: .54
4.2.2 Khối điều khiển Camera: .58
4.3 XÂY D ỰNG CÁC ỨNG DỤNG NHÚNG: .61
4.3.1 Sơ đồ giải thu ật: .61
KẾT LUẬN.70
PHỤ LỤC CÁC T Ừ VIẾT TẮC .71
DANH MỤC TÀI LIỆU THAM KHẢO.72
80 trang |
Chia sẻ: lethao | Lượt xem: 2892 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Đồ án Nghiên cứu và triển khai hệ thồng nhúng trên kit Spartan - 3E, xây dựng mô hình Giám sát và điều khiển thiết bị theo nhiệt độ phòng, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
như sơ đồ sau:
Hình 2.5: Khối LCD trên kit Spartan 3e
Đối với LCD có hai chế độ hoạt động là tám bit dữ liệu hoặc bốn bit dữ liệu. Ở
đây ta thấy trên kít ghép mối LCD hoạt động ở chế độ bốn bit dữ liệu. Quá trình hoạt
động được mô tả như sau:
Chân RS = 0 thanh ghi lệnh được chọn cho phép chúng ta gửi một lệnh như xóa
màn hình, đưa con trỏ về đầu dòng…, khi chân RS = 1 thanh ghi dữ liệu được chọn
cho phép chúng ta gửi dữ liệu lên màn hình LCD.
Chân R/W =1 cho phép chúng ta đọc thông tin từ LCD, R/W =0 cho phép chúng
ghi thông tin lên LCD.
Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 18
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
Chân cho phép E được sử dụng bởi LCD để chốt thông tin hiện hữu trên chân dữ
liệu của nó. Khi dữ liệu được cấp đến chân dữ liệu thì một xung mức cao xuống thấp
phải được áp đến chân này để LCD chốt dữ liệu trên các chân dữ liêu. Xung này phải
rộng tối thiểu là 450ns.
2.1.5 Bộ biến đổi tƣơng tự sang số:
6 Header kết nối đến ADC
LTC1407A_ 2 Kênh A/D
SPI_SCK : U16
AD_CONV : P11
SPI_MOSO : N10
LTC6912_2 Kênh Amp
SPI_MOSI : T4
AMP_CS : N7
SPI_SCK : U16
AMP_SHDN : P7
AMP_DOUT : A18
Hình 2.4: Khối ADC trên kit Spartan 3e
Kit Spartan_3E cung cấp hai kênh tín hiệu Analog, vi mạch LTC1407A là loại
biến đổi tưong tự sang số gồm hai bộ biến đổi riêng biệt, vi mạch LTC6912 gồm hai
bộ khuyếch đại có thể thay đổi được hệ số. Cả hai vi mạch này đều đuợc điều khiển
bởi chip FPGA.
Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 19
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
Hình 2.5: Sơ Đồ chân khối ADC
Tín hiệu tương tự được đưa vào VinA và VinB sẽ được biến đổi thành một số nhị
phân 14bit D[13:0] với điện áp so sánh 1 .65V
D[13:0] = 1.65
8192
1.25
Vin V
Gain
V
Gain : Độ lợi của bộ khuyếch đại
Vin : Điện áp ngỏ vào
D[13:0] : Số nhị phân 14bit
Cách tạo độ lợi cho vi mạch LTC6912 được cho trong bảng data sheet sau:
Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 20
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
Giao diện kết nối giữa chip FPGA với vi mạch LTC6912 :
Tín hiệu Chân FPGA Điếu khiển Diễn tả
SPI_MOSI T4 FPGA LTC6912
Tạo 8bit data điều
khiển độ lợi cho
LTC6912
AMP_CS N7 FPGA LTC6912
Tín hiệu chọn chip.
LTC6912 hoạt động
khi chân này ở mức 0
SPI_SCK U16 FPGA LTC6912 Xung clock
AMP_SHDN P7 FPGA LTC6912
Chân reset cho
LTC6912
AMP_DOUT E18 FPGA LTC6912
Dữ liệu 8bit ở ngỏ ra
của LTC6912. Tín
hiệu hồi tiếp
FPGA sẽ gởi dữ liệu nối tiếp 8 bit ra LTC6912 thông qua chân SPI_MOSI. Giữ
liệu 8 bit này sẽ được dùng để cài đặt cho hai bộ khuyếch đại A và B mỗi bộ trên cơ sỡ
4bit.
Hình 2.6: Tám bit ra LTC6912
2.1.5.2 Giới thiệu hai IC LTC6912 và LTC1407A
IC LTC6912:
Đây là loại IC có thể điều khiển được độ khuyếch đại bằng cách nạp vào thanh
ghi trong nó một giá trị 8bit nối tiếp. IC LTC6912 có hai kênh điều khiển độ khuyếch
đại độc lập nhau.
Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 21
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
Hình 2.7: Cấu trúc IC LTC6912
Qúa trình ghi nhận dữ liệu của LTC6912
AMP_CS : chân chọn chip.
SCK : chân clock khoảng 2.5Mhz.
SDI : chận dữ liệu vào .
AMO_DO : chân dữ liệu ra.
Ta nhận thấy rằng với mổi bit truyền đều tương xứng với tần số xung clock. Với
LTC6912 tần số xung clock tối đa cho phép là 10Mhz nếu lớn hơn giá trị này thì hệ
thống sẽ bị nhiễu do đó tần số xung clock thích hợp là 2.5MHz . Cách điều khiển như
Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 22
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
sau trước tiên chân AMP_CS phải ở mức thấp lúc này thanh ghi trong IC sẽ tiếp nhận
dữ liệu nối tiếp từ FPGA dựa trên cạnh lên của tần số xung clock trong khi đó dữ liệu
nhận được sẽ được gởi ngược trở về FPGA kể kiểm tra lúc này dữ liệu bám theo cạnh
xuống của xung clock . Cách thức giao tiếp được chỉ ra ở giản đồ thời gian ghi nhận
dữ liệu.
Hình 2.8: Giản đồ thời gian ghi nhận dữ liệu
LTC1407A:
Đây là IC thực hiện biến đổi tín hiệu tương tự sang tín hiệu số, nó cung cấp cho
ta hai bộ biến đổi riêng biệt tương tự như LTC6912 cả hai bộ biến đổi này hoạt động
một cách độc lập. Kết nối giao tiếp giữa FPGA và LTC1407A được trình bày ở hình 5,
FPGA giao tiếp với LTC1407A thông qua các chân SPI_MOSI, SPI_MISO và
SPI_CLK . Ý nghĩa của các chân đựơc chú thích ra như sau :
Khi chân AD_CONV ở mức cao thì bộ AD sẽ thực hiện biến đổi các tín hiệu
tương tự ở cả hai ngỏ vào của bộ biến đổi nhưng lúc này các kết quả sẽ không được
chuyển đến ngỏ ra chỉ khi nào tín hiệu ỏ trên nhân AD_CONV chuyển xuống mức
Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 23
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
thấp. Tốc độ lấy mẫu nằm trong khoảng 1.5 Mhz. Kết nối được chỉ ra ở giản đồ giao
tiếp LTC1407A.
Hình 2.9: Giản đồ giao tiếp LTC1407A
Sau khi có tín hiệu ra thì chân SPI_MISO sẽ đưa tín hiệu đến FPGA. Tín hiệu
được biến đổi được đưa ra dựa trên chu kỳ xung clock. Chu kỳ xung clock lúc này vào
khoảng 19.6nm.
2.2 VI ĐIỀU KHIỂN NHÚNG MICROBLAZE:
2.2.1 Giới thiệu về vi điều khiển Microblaze:
Các bộ vi xử lý có sẵn dùng cho dòng FPGA (Field Programmable Gate Arrays)
của Xillinx sử dụng với các công cụ phần mềm có trong phần mềm EDK (Embedded
Development kit) được phân thành 2 loại:
Bộ vi xử lý mềm MicrroBlaze.
Bộ vi xử lý cứng đã được nhúng sẵn PowerPC.
MicrroBlaze là bộ vi xử lý được dùng hầu hết trong FPGA các dòng như
Spartan-II, Spartan-III, Virtex của hãng Xillinx. MicroBlaze là một vi điều khiển ảo,
Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 24
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
nó tồn tại dưới dạng phần mềm đã được phát triển của hãng Xillinx, chúng ta có thể
thiết lập các thông số để sử dụng đối với vi điều khiển này (UART, các cổng vào ra
ngoại vi, ..) thông qua phần mềm EDK.
MicroBlaze là bộ xử lý mềm nhúng 32-bit của Xillinx. Tập lệnh thu gọn RISC
(Reduced Instruction Set Computer), với các bus riêng biệt để truy xuất dữ liệu và
lệnh từ bộ nhớ on-chip và bộ nhớ ngoài tại cùng một thời điểm.
2.2.2 Kiến trúc cơ bản của MicrroBlaze:
Kiến trúc của MicroBlaze có các đặc điểm sau:
Từ lệnh 32 bit với 3 toán hạng và 2 chế độ định địa chỉ.
Đường bus 32 bit địa chỉ.
1 khối ghi dịch.
2 cấp độ ngắt.
Khối ALU(Arithmetic Logic Unit): gồm các bộ cộng/trừ, ghi dịch/logic, nhân.
Hình 2.10: Kiến trúc cơ bản của vi điều khiển MicroBlaze
Trong đó có các thành phần sau:
Bus IF: (Bus interface) đường bus giao tiếp.
Instruction Buffer: bộ đệm lệnh.
Instruction Decode: bộ giải mã lệnh.
Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 25
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
Program Counter: bộ đếm chương trình.
Add/Sub: khối cộng/trừ; Shift/Logical: khối ghi dịch/lôgic; Multiply: khối
nhân.
Register File: thanh ghi dữ liệu 32thanh x 32bit.
2.2.3 Kiến trúc Pipeline của vi điều khiển MicroBlaze:
Vi điều khiển MicroBlaze xử lý lệnh theo kiến trúc pipeline song song, hầu
hết các lệnh của nó, mỗi giai đoạn mất 1 chu kỳ đồng hồ để thực hiện xong. Quá
trình xử lý lệnh được chia làm 3 giai đoạn: nhận lệnh (Fetch), giải mã lệnh
(Decode), thi hành lệnh (Execute).
Hình 2.11: Kiến trúc Pipeline của vi điều khiển MicroBlaze
Thông thường, nếu bỏ qua thời gian trễ nghỉ “stall” thì mỗi giai đoạn trên
chỉ mất 1 chu kỳ đồng hồ, khi đó 3 lệnh có thể được xử lý cùng một lúc, mỗi
lệnh được thi hành trong 1 đường ống gồm 3 giai đoạn. MicroBlaze có 1 bộ đệm
tiền nhận lệnh (Instruction Prefetch Buffer) để làm giảm xung đột tiềm ẩn
trong bộ nhớ khi thực hiện các lệnh đa chu kỳ.
Khi Pipeline được tạo trễ nghỉ “stall” do thực hiện lệnh đa chu kỳ trong giai
đoạn thi hành, bộ đệm tiền nhận lệnh sẽ tiếp tục nhận các lệnh ngay sau đó. Và
khi Pipeline thi hành trở lại, giai đoạn nhận lệnh có thể lấy lệnh trực tiếp từ bộ
đệm tiền nhận lệnh, thay vì đợi cho bộ nhớ lệnh truy cập để thi hành.
2.2.4 Giao tiếp tính hiệu trong MicroBlaze:
MicroBlaze cung cấp 3 giao tiếp bộ nhớ:
LMB: Local Memory Bus..
PLB: Processor Local Bus.
Fetch Decod
e
Execute
e Fetch Decod
e
Execute Execute Execute
Fetch Decod
e
Stall Stall Execute
Cycle 1 Cycle 2 Cycle 3 Cycle 4
Lệnh 1
Lệnh 2
Lệnh 3
Cycle 5 Cycle 7 Cycle 6
Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 26
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
OPB (On-Chip Peripheral Bus) và XCL (Xillinx Cache Link).
Hình 2.12: một hệ thống Bus điển hình
Trong đó:
IXC: Instruction side Xillinx Cache Link Interface (cặp liên kết đơn FSL chủ/tớ).
DXCL: Data side Xillinx Cache Link Interface (cặp liên kết đơn FSL chủ/tớ).
ILMB: Instruction interface, Local Memory Bus: giao tiếp lệnh theo chuẩn bus
LMB, chỉ dùng cho giao tiếp BRAM.
DLMB: Data interface, Local Memory Bus: giao tiếp dữ liệu theo chuẩn bus
LMB, chỉ dùng cho giao tiếp BRAM.
IOPB: Instruction interface, On-chip Peripheral Bus: giao tiếp lệnh theo chuẩn
bus OPB.
DOPB: Data interface, On-chip Peripheral Bus: giao tiếp dữ liệu theo chuẩn bus
OPB.
Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 27
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
MicroBlaze có kiến trúc kết nối lõi theo chuẩn IBM, chuẩn này cung cấp 3 loại
bus giành cho kết nối liên tục đa lõi, các thư viện macro và logic người dùng:
+ Bus lõi xử lý nội PLB (Processor Local Bus).
+ Bus ngoại vi on-chip OPB (On-chip Peripheral Bus).
+ Bus thanh ghi điều khiển thiết bị DCR (Device Control Register).
2.3 PHẦN MỀM EDK:
2.3.1 Giới thiệu Phần mềm EDK:
EDK là phần mềm của hãng xilinx được thiết kế tương thích với các chip FPGA
của hãng.
Chương trình EDK là một chương trình thân thiện với người sử dụng, giúp chúng
ta có thể dễ dàng thiết kế một hệ thống phức tạp mà chỉ thao tác đơn giản, vì thực chất
EDK sử dụng các chương trình VHDL viết sẵn (gọi là các IP) nên ta không cần viết
các IP đó, mà chỉ sử dụng nó, phần quan trọng là chúng ta phải viết phần mềm điều
khiển chip nhúng đã được viết sẵn đó, và điều này cũng thực sự không phải là khó
khăn vì chúng ta không cần sử dụng tập lệnh Asembly của chip nhúng ( được đặc tên
là MicroBlaze) mà chúng ta sẽ sử dụng ngôn ngữ Standard C hay C++ để viết chương
trình điều khiển MicroBlaze (tương đương với một vi xử lý 32 bit, đối với version 4.0
còn có thêm FPU/đơn vị xử lý dấu chấm động) và các thư viên hỗ trợ sẵn với các hàn
điều khiển ngoại vi rất nhiều).
2.3.2 Các tập lệnh trong EDK:
XGpio_mSetDatarReg(BaseAddress, Channel, Data)
Chức năng:
Xác định thanh ghi dữ liệu của kênh GPIO đã được xác định.
Các thông số:
BaseAddress: chứa địa chỉ nền của thiết bị GPIO.
Channel: bao gồm 2 kênh (1 hoặc 2).
Data: giá trị để ghi lên thanh ghi dữ liệu.
XGpio_SetDataDirection(XGpio * InstancePtr, unsigned Channel,
u32 DirectionMask)
Chức năng:
Định dạng hướng vào hay ra của dữ liệu cho kênh GPIO được xác định.
Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 28
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
Các thông số:
InstancePtr: là con trỏ chỉ tới ngoại vi đang làm việc.
Channel: bao gồm 2 kênh (1 hoặc 2).
DirectionMask: là một mặt nạ bit, xác định hướng của dữ liệu là hướng vào hay
ra, khi các bit được set lên 1 thì đó là ngõ vào, khi các bit được set về 0 thì đó
là ngõ ra.
Chú ý:
Nếu hàm này không sử dụng kênh 1, thì phần cứng phải được xây dựng ở chế
độ kênh đôi.
XGpio_DiscreteRead(XGpio *InstancePtr, unsigned Channel)
Chức năng:
Đọc dữ liệu tại vị trí con trỏ đang chỉ tới, ở kênh GPIO được xác định.
Các thông số:
InstancePtr: là con trỏ chỉ tới ngoại vi đang làm việc.
Channel: bao gồm 2 kênh (1 hoặc 2).
Chú ý:
Hàm trả về giá trị 32 bits chứa trong thanh ghi mà con trỏ đang chỉ tới.
Nếu hàm này không sử dụng kênh 1, thì phần cứng phải được xây dựng ở chế
độ kênh đôi.
XGpio_Initialize(XGpio * InstancePtr, u16 DeviceId )
Chức năng:
Khởi động con trỏ, trỏ tới một thiết bị. Mỗi thiết bị được đặt cho một tên riêng
duy nhất.
Thông số:
InstancePtr: là con trỏ chỉ tới một ngoại vi nhất định. Vùng nhớ của con trỏ
phải được phân phát bởi người dùng.
DeviceId:là tên riêng duy nhất của thiết bị được đặt bởi người dùng để phân
biệt với các thiết bị khác. Thiết bị này được điều khiển bởi con trỏ.
Chú ý:
Mọi thao tác muốn thực hiện trên thiết bị thì đầu tiên phải khởi động con trỏ,
trỏ tới thiết bị đó, nếu không chương trình sẽ báo lỗi.
Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 29
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
Hàm không có gái trị trả về.
XGpio_DiscreteWrite(XGpio * InstancePtr, unsigned Channel, u32 Data )
Chức năng:
Ghi dữ liệu vào vị trí (thiết bị) con trỏ đang chỉ tới,tương ứng với một kênh đã
được xác định.
Thông số:
InstancePtr: là con trỏ chỉ tới ngoại vi đang làm việc.
Channel: bao gồm 2 kênh (1 hoặc 2)
Data: giá trị để ghi lên thanh ghi dữ liệu tạ vị trí con trỏ đang trỏ tới.
Chú ý:
Hàm không có gái trị trả về.
Nếu hàm này không sử dụng kênh 1, thì phần cứng phải được xây dựng ở chế
độ kênh đôi.
XGpio_Discreteset(XGpio * InstancePtr, unsigned Channel, u32 Mask)
Chức năng:
Định các đầu ra riêng biêt lên mức logic 1, tương ứng với 1 kênh được chon
của thiết bị.
Thông số:
InstancePtr: là con trỏ chỉ tới ngoại vi đang làm việc.
Channel: bao gồm 2 kênh (1 hoặc 2)
Mask:set các bit ngõ ra lên mức cao, các bit khác của thanh ghi dữ liệu không
bị ảnh hưởng.
XGpio_Discreteclear(XGpio * InstancePtr, unsigned Channel, u32 Mask)
Chức năng:
Định các đầu ra riêng biệt xuống mức logic 0, tương ứng với 1 kênh được chọn
của thiết bị.
Thông số:
InstancePtr: là con trỏ chỉ tới ngoại vi đang làm việc.
Channel: bao gồm 2 kênh (1 hoặc 2)
Mask:set các bit ngõ ra xuống mức thấp, các bit khác của thanh ghi dữ liệu
không bị ảnh hưởng.
Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 30
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
XGpio_mGetDataReg(BaseAddress, Channel)
Chức năng:
Lấy dữ liệu của một thanh ghi của một kênh đã được xác định.
Thông số:
BaseAddress: chứa địa chỉ nền của thiết bị GPIO.
Channel: bao gồm 2 kênh (1 hoặc 2).
Chú ý:
Hàm trả về giá trị dữ liệu 32bits
XGpio_mReadReg(BaseAddress, RegOffset)
Chức năng:
Đọc một giá trị từ thanh ghi GPIO. Kết quả thu được một dữ liệu 32bits. Nếu
thiết bị hoạt động với độ rộng bit nhỏ hơn 32bits thì chỉ có lấy những bit có trọng số
nhỏ, các bit còn lại sẽ là bit 0.
Thông số:
BaseAddress: chứa địa chỉ nền của thiết bị GPIO.
RegOffset: địa chỉ của thanh ghi được đọc cách địa chỉ nền một khoảng
XGpio_mWriteReg(BaseAddress, RegOffset, Data)
Chức năng:
Ghi một giá trị từ thanh ghi GPIO, một dữ liệu 32bits được ghi. Nếu thiết bị
hoạt động với độ rộng bit nhỏ hơn 32bits thì chỉ có lấy những bit có trọng số nhỏ hơn
mới được ghi.
Thông số:
BaseAddress: chứa địa chỉ nền của thiết bị GPIO.
RegOffset: địa chỉ của thanh ghi được ghi cách địa chỉ nền một khoảng.
Data: dữ liệu được ghi vào thanh ghi.
XUartLite_ClearStats(XUartLite *InstancePtr)
Chức năng:
Đưa về không các số liệu của các phần cứng được chỉ tới.
Thông số:
InstancePtr: con trỏ chỉ tới thiết bị truyền dẫn nối tiếp.
Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 31
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
XUartLite_DisableInterrupt(XUartLite *InstancePtr)
Chức năng:
Hàm này có tác dụng vô hiệu hóa các ngắt khi truyền dẫn nối tiếp. Sau khi hàm
này được gọi thì việc nhận các dữ liệu nối tiếp sẽ không gặp phải bất cứ ngắt nào.
Thông số:
InstancePtr: con trỏ chỉ tới thiết bị truyền dẫn nối tiếp.
XUartLite_EnableInterrupt(XUartLite *InstancePtr)
Chức năng:
Hàm này cho phép các ngắt được hoạt động trong quá trình nhận và truyền dữ
liệu nối tiếp. Đối với một thiết bị có chứa 16 byte để truyền nhận dữ liệu theo kiểu
FIFO thì bất cứ lúc nào cũng có thể có ngắt được cho phép trong quá trình truyền nhận
dữ liệu.
Thông số:
InstancePtr: con trỏ chỉ tới thiết bị truyền dẫn nối tiếp.
XUartLite_IsSending(XUartLite *InstancePtr)
Chức năng:
Hàm sẽ xác định liệu thiết bị truyền dẫn nối tiếp được chỉ ra có đang gửi dữ liệu
hay không. Nếu thanh ghi truyền dẫn không bỏ trống tức là nó đang gửi dữ liệu.
Thông số:
InstancePtr: con trỏ chỉ tới thiết bị truyền dẫn nối tiếp.
Chú ý:
Hàm trả về giá trị đúng khi thiết bị đang gửi dữ liệu, ngược lại là sai.
XUartLite_ResetFifos(XUartLite *InstancePtr)
Chức năng:
Hàm có tác dụng reset bộ nhớ FIFO, việc truyền và nhận dữ liệu sẽ bị xóa. Hàm
này có thể được sử dụng trong các ứng dụng nhằm xóa các dữ liệu không mong muốn
trong bộ nhớ FIFO.
Thông số:
InstancePtr: con trỏ chỉ tới thiết bị truyền dẫn nối tiếp.
Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 32
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
XUartLite_RecvByte(u32 BaseAddress)
Chức năng:
Hàm nhận một byte đơn từ cổng truyền dẫn nối tiếp. Hàm đọc giá trị 8 bits từ
thanh ghi nhận.
Thông số:
BaseAddress: là địa chỉ nền của thiết bị được xác định.
Chú ý:
Hàm trả lại giá trị byte mong muốn.
XUartLite_RecvByte(u32 BaseAddress, u8 Data )
Chức năng:
Hàm gửi đi một byte đơn qua cổng truyền dẫn nối tiếp. Hàm sẽ ghi giá trị 8 bits
vào thanh ghi truyền.
Thông số:
BaseAddress: là địa chỉ nền của thiết bị được xác định.
Data : byte dữ liệu gửi đi.
Tạo hệ thống phần cứng cơ bản trong XPS (Xilinx Platform Studio): khi các bạn
cho chạy chương trình EDK thì một cửa sổ xuất hiên gọi là cửa sổ XPS, chúng ta sẽ
bắt đầu tạo Project ở đây, màn hình khởi đông chương trình như sau :
2.3.3 Cách tạo Project với phần mềm EDK:
Hình 2.10: Cửa sổ XPS
Trong hôp thoại đầu tiên xuất hiện, cho phép chúng ta thao tác cơ bản :
Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 33
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
Base System Builder Wizard :hộp thoại này sẽ cho phép chúng ta tao một Project
mới.
Open A Recent Project : mở một Project đã có sẵn. Ở đây sẽ bắt đầu với bước tạo
một Project mới: nhấn Ok khi hôp chọn ở Base System…, hộp thoại tiếp theo sẽ hiện
ra:
Hình 2.11: Hộp thoại Create New XPS Project
Ở hộp thoại này, phần mềm sẽ yêu cầu đặt tên cho thư mục chứa Project và các
thư mục liên quan, nhần Browse và tạo một thư mục với một đường dẫn cụ thể, ở đây,
mình sẽ đặt tên cho thư mục doan, lưu ý nhấn Open 2 lần, chương trình sẽ tự động tạo
ra file doan.xmp trong thư mục chúng ta vừa tạo.
Click Next xuất hiện hộp thoại Select Board, lần lượt chọn:
Board vendor: Xilinx
Board name: Spartan-3E Starter Board
Board revision: C
Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 34
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
Hình 2.12: Hộp thoại Select Board
Click Next xuất hiện hộp thoại Select Processor.
Hình 2.13: Hộp thoại Select Processor
Click Next xuất hiện hộp thoại Configure MicroBlaze Processor. Lần lượt
chọn
Reference clock frequency: 50 MHz
Processor–Bus clock frequency: 50 MHz
Debug interface: On-Chip H/W debug module
Local Data and Instruction memory: 8 KB
Cache setup: Enable - unchecked
Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 35
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
Hình 2.14: Hộp thoại Configure MicroBlaze Processor
Click Next xuất hiện hộp thoại Configure IO Interfaces, đánh dấu chọn
RS232_DCE và LEDs_8Bit.
RS232_DCE: 115200 bits per second, 8 data bits, no parity, no interrupt
LEDs_8Bit: XPS GPIO peripheral, no interrupt.
Tương tự chọn ngoại vi Dip_switchs_4bit và các ngoại vi khác bỏ trống.
Hình 2.15: Hộp thoại Configure IO Interfaces
Click Next cho đến khi xuất hiện hộp thoại Add Internal Peripherals. Bạn có
thể click Add Peripheral để thêm ngoại vi.
Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 36
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
Click Next xuất hiện hộp thoại Software Setup, cho phép Memory test được
chọn và không chọn Peripheral selftest.
Hình 2.16: Hộp thoại Software Setup
Click Next xuất hiện hộp thoại Configure Memory Test Application.
Hình 2.17: Hộp thoại Configure Memory Test Application
Click Next xuất hiện hộp thoại System Created, tổng kết phần cứng mà ta vừa
tạo ra.
Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 37
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
Hình 2.18: Hộp thoại System Created
Click Generate, xuất hiện hộp thoại Finish.
Click Finish để kết thúc quá trình tạo project. Nếu hộp thoại Next Step
xuất hiện thì chọn muc Start Using Platform Studio và click OK.
Cửa sổ System Assembly View1 xuất hiện, thể hiện sự kết nối của hệ
thống ngoại vi và hệ thống bus.
Hình 2.19: Cửa sổ System Assembly View
Chọn Project → Generate and View Block Diagram để thể hiện sơ đồ khối phần
cứng.
Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 38
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
Hình 2.20: Block Diagram View of the Generated Project
Như vậy ta đã xây dựng xong phần cứng cơ bản. Trong thực tế, nếu người dùng
cần thêm ngoại vi cho thiết kế thì có nhiều cách thêm ngoại vi (có hướng dẫn trong
video kèm theo).
Chương 3: Phần mền VB và giao diện điều khiển 39
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
Chƣơng 3: PHẦN MỀM VB VÀ GIAO DIỆN ĐIỀU KHIỂN
3.1 GIỚI THIỆU VỀ NGÔN NGỮ LẬP TRÌNH VB.NET:
Visual Basic.NET (VB.NET) là ngôn ngữ lập trình khuynh hướng đối tượng
(Object Oriented Programming Language) do Microsoft thiết kế lại từ con số không.
Visual Basic.NET (VB.NET) không kế thừa VB6 hay bổ sung, phát triển từ VB6 mà
là một ngôn ngữ lập trình hoàn toàn mới trên nền Microsoft ‟s .NET Framework. Do
đó, nó cũng không phải là VB phiên bản 7.
Thật sự, đây là ngôn ngữ lập trình mới, không những lập nền tảng vững chắc
theo kiểu mẫu đối tượng như các ngôn ngữ lập trình hùng mạnh khác như C++, Java
mà còn dễ học, dễ phát triển và còn tạo mọi cơ hội hoàn hảo để giúp ta giải đáp những
vấn đề khúc mắc khi lập trình.
3.2 LẬP TRÌNH GIAO TIẾP CỔNG NỐI TIẾP VB.NET:
3.2.1 Tự động dò tìm cổng COM:
Tự động dò tìm cổng COM và add vào listbox, sử dụng đoạn mã sau:
Sub GetSerialPortNames()
' Show all available COM ports.
For Each sp As String In My.Computer.Ports.SerialPortNames
ListBox1.Items.Add(sp)
Next
End Sub
Hoặc đoạn mã sau:
For n As Integer = 0 To _
My.Computer.Ports.SerialPortNames.Count - 1
cbport.Items.Add( _
My.Computer.Ports.SerialPortNames(n))
3.2.2 Đóng mở cổng COM:
Để mở cổng COM sử dụng đoạn lệnh sau:
If SerialPort1.IsOpen Then
SerialPort1.Close() ’ đóng cổng COM
SerialPort1.Open() ’ mở cổng COM
Else
Chương 3: Phần mền VB và giao diện điều khiển 40
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
SerialPort1.Open()
End If
3.2.3 Nhận dữ liệu từ cổng COM:
Khi có sự kiện nhận dữ liệu từ cổng COM sẽ hiển thị ra textbox. Dữ liệu
nhận được dạng string.
Private Sub SerialPort1_DataReceived(ByVal sender As Object,
ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles
SerialPort1.DataReceived
Control.CheckForIllegalCrossThreadCalls = False
txtreceiver.Text = SerialPort1.ReadExisting
End Sub
Hoặc sử dụng hàm sau với cổng COM 1:
Function ReceiveSerialData() As String
' Receive strings from a serial port.
Dim returnStr As String = ""
Using com1 As IO.Ports.SerialPort = _
My.Computer.Ports.OpenSerialPort("COM1")
Do
Dim Incoming As String = com1.ReadLine()
If Incoming Is Nothing Then
Exit Do
Else
returnStr &= Incoming & vbCrLf
End If
Loop
End Using
End Function
3.2.4 Gửi dữ liệu ra cổng COM:
Dữ liệu truyền đi mã ASCII.
Mã lệnh: phải mở cổng COM trước khi truyền dữ liệu.
SerialPort1.Write(Tx.Text)
Chương 3: Phần mền VB và giao diện điều khiển 41
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
Hoặc sử dụng hàm sau:
Sub SendSerialData(ByVal data As String)
' Send strings to a serial port.
Using com1 As IO.Ports.SerialPort = _
My.Computer.Ports.OpenSerialPort("COM1")
com1.WriteLine(data)
End Using
E
Các file đính kèm theo tài liệu này:
- Nghiên cứu và triển khai hệ thồng nhúng trên kit Spartan-3E, xây dựng mô hình Giám sát và điều khiển thiết bị theo nhiệt độ phòng.pdf