Está en la página 1de 22

EME-ST09

www2.hcmut.edu.vn/~vkchau/
HƯỚNG DẪN SỬ DỤNG PHẦN MỀM EDK 7.1i
Giới thiệu :
Trong chương trình đào tạo, chắc hẳn thế nào các bạn cũng đã được học môn
Vi Xử Lý và thí nghiệm vi xử lý, và các bạn đã làm quen với việc lập trình 89C51 bằng
ngôn ngữ Assembly dành cho họ 8051.Tuy nhiên ,bên cạnh đó các bạn cũng có thể lập
trình cho họ 8051 bằng ngôn ngữ C(cụ thể là Keil C) , tài liệu có thể đọc cuốn “THIẾT
KẾ HỆ THỐNG VỚI HỌ 8051” của thầy Tống Văn On. Vì ngôn ngữ C là ngôn ngữ cấp
cao nên việc lập trình cho 8051 dễ dàng hơn so với sử dụng ngôn ngữ Assembly
Việc viết chương trình rồi đổ vào 89C51 được gọi là “nhúng” và hệ thống tạo ra được
gọi là hệ thống nhúng. Tuy nhiên, 8051 có hạn chế là bộ nhớ nhỏ(cả trong lẫn ngoài), nên
ở đây, mình xin giới thiệu một hệ thống nhúng hoàn toàn (không có sẵn Vi đều khiển), vi
điều khiển và chương trình điều khiển ở đây cũng sẽ được nhúng vào trong một FPGA(
Field Programable Gate Array). Và một trong những chương trình thông dụng được sử
dụng hiện nay là chương trình EDK (Embedded Design /Development Kit) được viết bởi
hãng Xilinx và sử dụng FPGA của hãng Xilinx
Tài liệu này sẽ hướng dẫn các bạn sử dụng phần mềm EDK 7.1i ,là version 2005 của
hãng Xilinx.
Chương trình EDK 7.1i 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 đặ 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)
Sau đây xin đi vào chi tiết hướng dẫn sử dụng ,xin lưu ý , file này sẽ đi kèm theo file
hướng dẫn hình ảnh + âm thanh và kết quả minh họa
Chương trình được viết với sự hướng dẫn tận tình của thầy Võ Kỳ Châu
Lưu ý :chương trình EDK 7.1i chỉ có thể chạy được khi các bạn đã cài phần mềm Xilinx
ISE 7.1

CÁC BƯỚC TẠO MỘT PROJECT :


Bước 1 :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 :
EME-ST09
www2.hcmut.edu.vn/~vkchau/

Trong hôp thoại đầu tiên xuất hiện, cho phép chúng ta thao tác cơ bả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:
EME-ST09
www2.hcmut.edu.vn/~vkchau/

Ơû 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 là vidu, lưu ý nhấn Open 2 lần, chương trình sẽ tự động tạo ra file
system.xmp trong thư mục chúng ta vừa tạo :

Nhấn OK để đi đến bước tiếp theo , ở bước này chúng ta sẽ tạo một hệ thống với sự hỗ
trợ sẵn của phần mềm:
EME-ST09
www2.hcmut.edu.vn/~vkchau/

Nhấn Next để đi đến bước tiếp theo:


Ơû bước này sẽ cho phép chúng ta tạo xây dựng một hệ thống dựa trên các Kit hỗ trợ sẵn
của Xilinx hoặc chúng ta sẽ tạo ra một hệ thống riêng dựa trên các hỗ trợ có sẵn của
phầm mềm :
- I would like to creat a system for the folloeing development Board: tạo hệ thống
dựa tr6n các Kit Development của Xilinx, ví dụ như AFX Virtex II Pro fg456
Proto Board , Spartan 3_Starter Board…
- I would like to creat a system for a custom Board :tạo một board riêng với các
phần cứng và ngoại vi được hỗ trợ trong phần mềm, Lưu ý đây chỉ là chương
trình chạy trên Kit Development chứ không phải chương trình nạp trực tiếp để tạo
sản phẩn chuyên dụng
EME-ST09
www2.hcmut.edu.vn/~vkchau/

Ơû đây chúng ta sẽ tạo ra hệ thống mà được hỗ trợ sẵn, mà cụ thể là sử dụng Kit Spartan
3-Starter, ta chon như sau :
EME-ST09
www2.hcmut.edu.vn/~vkchau/
Hình sau là mặt trên và dưới với các ngoại vi của KIT Spartan_3 Starter

Phần này sẽ gởi các bạn qua File kèm theo :ug130.pdf

Chúng ta cũng có thể sử dụng Kit Development khác nếu có( ví dụ Kit Virtex II Pro)
Nhấn Next để qua bước tiếp theo
EME-ST09
www2.hcmut.edu.vn/~vkchau/

Kit Spartan 3 Starter với các thông số có sẵn ở phần trên, còn phần dưới trong ô chọn
MicroBlaze hoặc Power PC thì chỉ có thể chọn MicroBlaze vì nó là một vi xử lý mềm,
tức là nó cũng được nhúng vào FPGA trên Kit, còn Power PC là chip cứng , tức là chip
này đã có sẵn trên Kit( Vd Virtex II Pro hay Virtex IV), do vậy, chúng ta sẽ không tốn tài
nguyên trên FPGA khi sử dụng Power PC (nếu dùng các Kit trên mà sử dụng MicroBlaze
thì sẽ tốn thêm tài nguyên trên FPGA),nghĩa là đối với các Kit có hỗ trợ Power PC ta chỉ
cần nhúng phần mềm điều khiển mà không cần nhúng vi xử lý. Do vậy đối với các thiết
kế lớn hoặc cần viết thêm các ngoại vi thì chúng ta mới sử dụng Power PC, còn bình
thường chúng ta sử dụng MicroBlaze vì tính linh động của nó
Nhấn Next để qua bước tiếp theo
EME-ST09
www2.hcmut.edu.vn/~vkchau/

:
Ơû hộp thoại này cho phép chúng ta chọn tần số (với điều liện là Kit phải hỗ trợ nhiều
tần số, nếu không chúng ta cứ để mặc định), và chọn kích thước BRAM(Block RAM:là
RAM ở trong chip, tốc độ cao và do chip quản lý trực tiếp), kích thước này tùy thuộc vào
số lượng cổng của FPGA được sử dụng,đối với Spartan 3 được sử dụng trong Kit Spartan
3 Starter thì kích thước tối đa của BRAM là 16KB. Phần debug thì cứ để mặc định vì
phần đó liên qua đến tập lệnh Debug mà ở đây không đề cập, nếu bạn nào có nhu cầu tìm
hiểu về phần Debug này thì xin hãy tìm trong phần tài liệu gởi kèm
Nhấn Next để tiếp tục quá trình thiết kế

Bước tiếp theo, chương trình sẽ cho phép chúng ta lựa chọn các ngoại vi :
EME-ST09
www2.hcmut.edu.vn/~vkchau/

Đầu tiên là cổng truyền bất đồng bộ UART,giao thức truyền của nó được hỗ trợ sẵn và
gọi là OPB UARTLITE ,thường thì chúng ta dùng nó để giao thiếp với máy tính hay bất
kì thiết bị nào sử dụng cổng truyền bất đồng bộ, tốc độ truyền chúng ta có thể lưạ chọn
được, vấn đề lưu ý là không nên chọn quá lớn ,vì một lệnh xử lý của C tương đương với
nhiều chu kì máy,mà xung cung cấp là 50MHz(có thể cao hơn đối với các Board khác
hay chúng ta có mạch tạo dao động gắn thêm) hơn nữa thường thì chúng ta truyền lương
data rất lớn nên nếu các bạn chọn tốc độ cao thì d64 gây hiểu nhầm mức dẫn đến truyền
sai dữ liệu, ở đây xin chọn tốc độ là 38600b bps,chúng ta cũng có thể chọn số bit cho data
truyền đi, tối đa là 32 bit , và chọn truyền bit Parity(kiểm tra lỗi) hoặc không, các bạn nhớ
tốc độ truền và các phần đã chọn để sau này giao tiếp với máy tính hoặc các các thiết bị
mà chúng ta muốn giao tiếp với hệ thống chúng ta vừa tạo ra
Phần tiếp là Led_8 bit, được gọi tên là OPB GPIO,cũng được hỗ trợ để sử dụng 8
LED đơn trên Kit, DataSheet đi kèm,các bạn có thể tham khảo để tìm hiểu các thông số,
ở thiết kế trong phần ví dụ này, mình chọn cả cổng RS232 và Led_8 bit trong hộp thoại
đầu tiên này

Nhấn Next để chọn các ngoại vi khác :


EME-ST09
www2.hcmut.edu.vn/~vkchau/

Ơû hộp thoại này cho phép chọn ngoại vi là Led 7 đoạn và 4 nút nhấn trên kit, thực
chất 4 nút nhấn này chúng ta chỉ được sử dụng 3 nút nhấn, vì chương trình đã sử dụng nút
User Reset hay Button 3 làm nút khởi động người dùng, nút này khác với nút Reset hệ
thống (RESET), khi nhấn nút này, chương trình sẽ được thực thi lại từ đầu một lần nữa,
còn nút reset hệ thống sẽ RESET toàn bộ hệ thống lại,trong chương trình này sẽ không sử
dụng 2 ngoại vi này (đánh dấu không chọn vào các ô tương ứng)
Nhấn Next :
Hộp thoại tiếp theo sẽ cho phép chúng ta chọn các Dip switch và SRAM(8 nút trượt
trên Board): trong thiết kế này sẽ không sử dụng Dip Switch , nhưng sử dụng SRAM vì
đây là thiết bị lưu trữ ngoài có kích thước lớn (1 MB), dùng để lưu trữ dữ liệu rất tốt, một
kỳ Read/Write của nó tương đương từ 5->7 chu kỳ lệnh
EME-ST09
www2.hcmut.edu.vn/~vkchau/

Nhấn Next 2 lần để hoàn thành việc thiết kế ban đầu


Bước tiếp theo sẽ cho chúng ta chọn thiết bị IN/OUT hay không, và có tạo ra chương
trình chạy thử Test_Memory_Application hay không, chúng ta để mặc định bước này,
nghĩa là thiết bị IN/OUT của chúng ta là RS232 và cho phép tạo ra File Test chương
trình, file test này chúng ta sẽ chỉnh sửa lại tùy ý, đây là chương trình sẽ điều khiển Chip
nhúng MicroBlaze
EME-ST09
www2.hcmut.edu.vn/~vkchau/
Nhấn Next để đến bước tiếp theo, bước này sẽ cho phép chúng ta đặt chương trình ,dữ
liệu và vùng stack trong BRAM hoặc SRAM

Nhấn Next vì phần này chúng ta sẽ chỉnh sửa sau.


Chương trình sẽ hiên hộp thoại hoàn tất thiết kế, ở hộp thoại này các bãn sẽ thấy hiện lên
một số các thông số của các ngoại vi vừa chọn, bạn có thể quay ngược lại để chỉnh sửa
hoặc nhấn Generate để hoàn tất thiết kế:

Một hôp thoại thông báo các bước thiết kế đã thành công, nhấn Finish hoàn thành
EME-ST09
www2.hcmut.edu.vn/~vkchau/

Hộp thoại của bước thứ hai sẽ xuất hiện, cho phép chúng ta chỉnh sửa(1), dịch chương
trình và Download xuống Board (3),chỉnh sửa chương trình TestMemory_Application(4)
hay xem lại và chỉnh sửa cho thiết kế vừa mới tạo ra (5)
Ở đây sẽ chọn 5 vì chúng ta cần chỉnh sửa một ít trong chương trình ứng dụng và một
số chương trình phụ trợ khác
Sau khi hoàn chỉnh các tất cả các bước trên,màn hình XPS hiện ra như sau :
EME-ST09
www2.hcmut.edu.vn/~vkchau/
Ở trên cùng là các thanh công cụ với các công cụ hỗ trợ như dịch ra chỗi bit, nạp vào
Kit, mô phỏng…
Ở bên trái màn hình là cửa sổ quản lý hệ thống và quản lý ứng dụng, các bạn có thể
chỉnh sửa bổ xung hệ thống và quản lý ứng dụng tại cửa sổ này

Ở Tab System ,bạn có thể chỉnh sửa lại thiết kế, nếu muốn chỉnh sửa , bổ xung hay bỏ
bớt ngoại vi ,các bạn nhấn chột phải vào CPU-microblaze_0 ,sẽ có các thẻ Tab hiện ra
tương ứng

Mục Add/ Edit Core cho phép chúng ta thêm bớt, chỉnh sửa phần cứng :ngoại vi địa
chỉ ,Port, thông số…:
Nếu muốn thêm phần nào, ta chọn ở bên cửa sổ phải ,nhấn Add, muốn bớt ta chọn phần
cần bớt và nhấn Delete,tuy nhiên nếu không có ngoại vi tương ứng thì chúng ta sẽ không
lựa chọn chỉnh sửa.Hơn nữa, địa chỉ và các Port …là do hệ thống quy định, có trong bảng
datasheet tương ứng với mỗi Kit, nên nếu không cần thiết thì ta không chỉnh sửa phần
này

Tương ứng với Platform Setting cũng vậy,trong hộp thoại này chỉ có phần nên quan tâm
là các thư viện bổ xung, nếu muốn sử dụng các bạn nên tìm hiểu các tập lệnh của các thư
viện này :

Ví dụ thư viện xilmfs dùng để quản lý thư mục và tập tin…


EME-ST09
www2.hcmut.edu.vn/~vkchau/
Tuy nhiên các thư viện này cũng không cần thiết, vì các thư viện liên quan đến hệ thống
chúng ta tạo ra thì phần mềm đã tự động tạo ra cho chúng ta ,ngoài ra còn hỗ trợ thêm thư
viện chuẩn của C nên nếu không có nhu cầu thì không nên thêm vào các thư viện này
Ở Tab Application ,ứng dụng mà chúng ta tạo ra đã dược tự động đánh dấu chọn để
khi dịch chương trình ,thì chương trình này sẽ là chương trình điều khiển của chúng ta
Ở phần này có hai phần rất quan trọng mà chúng ta cần chú ý la file Linker_Script
thộc tab Complier Option, và file TestApp_Memery.c thuộc tab Source:

File Linker_Script :File Linker Script sẽ cho phép chúng ta đặt chương trình ,dữ
liệu và vùng Stack vào các bộ nhớ có thể có của hệ thống, mặc định chương trình sẽ
chọn BRAM để đưa vào, tuy nhiên ,nếu chúng ta muốn sử lý dữ liệu chẳng hạn thì
kích thước của BRAM là quá nhỏ để chứa dữ liệu, khi đó ta cần một bộ nhớ khác để
đưa dữ liệu vào ,và File Linker_Script này sẽ cho phép chúng ta làm điều đó ,lưu ý
vì Kit Spartan 3 Starter chỉ có SRAM nên chúng ta chỉ có thể đặ dữ liệu trong vùng
BRAM hoặc SRAM, nếu các bạn muốn đặt vùng nào vào SRAM, thì ở cuối phần đó,
các bạn sẽ chọn ilmb_cntlr hoặc SRAM_256Kx32_C_MEM0_BASEADDR

_STACK_SIZE = DEFINED(_STACK_SIZE) ? _STACK_SIZE : 0x400;

/* Define all the memory regions in the system */


MEMORY
{
SRAM_256Kx32_C_MEM0_BASEADDR : ORIGIN = 0x20100000, LENGTH =
0x000FFFFF
ilmb_cntlr : ORIGIN = 0x00000000, LENGTH = 0x1fff
}

/*
* Specify the default entry point to the program
*/
ENTRY(_start)

/*
* Define the sections, and where they are mapped in memory
*/
SECTIONS
{

.text : {
_ftext = .;
*(.text)
*(.text.*)
*(.gnu.linkonce.t*)
_etext = .;
} > ilmb_cntlr
EME-ST09
www2.hcmut.edu.vn/~vkchau/

.rodata : {
_frodata = .;
*(.rodata)
*(.rodata.*)
*(.gnu.linkonce.r*)
_erodata = .;
} > ilmb_cntlr

/* Alignments by 8 to ensure that _SDA2_BASE_ on a word boundary */


.sdata2 : {
. = ALIGN(8);
_sdata2_start = .;
*(.sdata2)
. = ALIGN(8);
_sdata2_end = .;
} > ilmb_cntlr
_sdata2_size = _sdata2_end - _sdata2_start;
PROVIDE (_SDA2_BASE_ = _sdata2_start + (_sdata2_size / 2 ));

.data : {
. = ALIGN(4);
_fdata = .;
a = 0x1000;
*(.data)
*(.data.*)
*(.gnu.linkonce.d*)
_edata = .;
} > SRAM_256Kx32_C_MEM0_BASEADDR

.eh_frame : {
*(.eh_frame)
} > ilmb_cntlr

/* Alignments by 8 to ensure that _SDA_BASE_ on a word boundary */


/* Note that .sdata and .sbss must be contiguous */

.sdata : {
. = ALIGN(8);
_ssro = .;
*(.sdata)
} > ilmb_cntlr
.sbss : {
. = ALIGN(4);
PROVIDE (__sbss_start = .);
*(.sbss)
EME-ST09
www2.hcmut.edu.vn/~vkchau/
. = ALIGN(8);
_essro = .;
} > ilmb_cntlr
PROVIDE (__sbss_end = _essro);
_ssro_size = _essro - _ssro;
PROVIDE (_SDA_BASE_ = _ssro + (_ssro_size / 2 ));

.bss : {
. = ALIGN(4);
PROVIDE (__bss_start = .);
*(.bss)
*(COMMON)
. = ALIGN(4);
PROVIDE (__bss_end = .);
} > ilmb_cntlr

.bss_stack : {
. = ALIGN(8);
_heap = .;
_heap_start = _heap;
. += _STACK_SIZE;
. = ALIGN(8);
_stack = .;
__stack = _stack;
} > SRAM_256Kx32_C_MEM0_BASEADDR
}

Ở chương trình này, mình sẽ tạo một ứng dụng để nhập dữ liệu từ bàn phím(chẳng hạn
100 ký tự), lưu trong SRAM và cho hiển thị giá trị nhị phân theo bảng mã ASCII lên
LED 8 bit, do vậy mình chọn vùng data đặt trong SRAM, tuy nhiên vùng bss_stack cuối
cùng cũng nên đặt trong SRAM, khai báo như trên thì chúng ta đã có thể đặt dữ liệu vào
trong SRAM
Và file TestApp_Memery chưa chỉnh sữa(do phần mềm tự tạo) :

#include "xutil.h"
#include "xgpio_l.h"

/*
* Routine to write a pattern out to a GPIO
* which is configured as an output
* PARAMETER C_ALL_INPUTS = 0
*/
void WriteToGPOutput(Xuint32 BaseAddress, int gpio_width) {
int i=0, j=0;
volatile int delay=0;
EME-ST09
www2.hcmut.edu.vn/~vkchau/
int numTimes = 5;

XGpio_mSetDataDirection(BaseAddress, 1, 0x00000000); /* Set as outputs */


while (numTimes > 0) {
j = 1;
for(i=0; i<(gpio_width-1); i++) {
XGpio_mSetDataReg(BaseAddress, 1, j);
j = j << 1;
for (delay=0; delay<1000000; delay++) {
; //wait
}
}
j = 1;
j = ~j;
for(i=0; i<(gpio_width-1); i++) {
XGpio_mSetDataReg(BaseAddress, 1, j);
j = j << 1;
for (delay=0; delay<1000000; delay++) {
; //wait
}
}
numTimes--;
}
}

//====================================================

int main (void) {

print("-- Entering main() --\r\n");

/*
* MemoryTest routine will not be run for the memory at
* 0x00000000 (dlmb_cntlr)
* because it is being used to hold a part of this application program
*/

WriteToGPOutput(XPAR_LEDS_8BIT_BASEADDR, 8);

/* Testing EMC Memory (SRAM_256Kx32)*/


{
XStatus status;
EME-ST09
www2.hcmut.edu.vn/~vkchau/
print("Starting MemoryTest for SRAM_256Kx32:\r\n");
print(" Running 32-bit test...");
status =
XUtil_MemoryTest32((Xuint32*)XPAR_SRAM_256KX32_MEM0_BASEADDR,
1024, 0xAAAA5555, XUT_ALLMEMTESTS);
if (status == XST_SUCCESS) {
print("PASSED!\r\n");
}
else {
print("FAILED!\r\n");
}
print(" Running 16-bit test...");
status =
XUtil_MemoryTest16((Xuint16*)XPAR_SRAM_256KX32_MEM0_BASEADDR,
2048, 0xAA55, XUT_ALLMEMTESTS);
if (status == XST_SUCCESS) {
print("PASSED!\r\n");
}
else {
print("FAILED!\r\n");
}
print(" Running 8-bit test...");
status =
XUtil_MemoryTest8((Xuint8*)XPAR_SRAM_256KX32_MEM0_BASEADDR, 4096,
0xA5, XUT_ALLMEMTESTS);
if (status == XST_SUCCESS) {
print("PASSED!\r\n");
}
else {
print("FAILED!\r\n");
}
}

print("-- Exiting main() --\r\n");


return 0;
}
Chương trình trên chỉ test bộ nhớ ,sau đây là chương trình của ví dụ :
#include "xparameters.h"

#include "xutil.h"
#include "xgpio_l.h"
main()
{
int i;
EME-ST09
www2.hcmut.edu.vn/~vkchau/
extern char a[100] /*biến a phải được khai báo trong Linker_Script, có địa chỉ Offset
là phần sau phần sau dấu bằng a = 0x1000; thì địa chỉ của a[0] sẽ là0x20101000,vì địa chỉ
bắt đầu của SRAM là 0x20100000 */
xil_printf(“chuong trinh bat dau\n\r);

for(i=0;i<100;i++)
{
a[i]=XuartLite_RecvByte(STDIN_BASEADDRESS);
xil_printf(“\n\rky tu ban vua nhap la :%c”,a[i]);
xil_printf(“\n\rgia tri thap phan vua nhap la:%d”,a[i]);
xil_printf(“\n\rgia tri thap luc phan ban moi vua nhap la:%x”,a[i]);
Xgpio_mSetDataReg(0x40000000,1,a[i]);
}
xil_printf(“chuong trinh ket thuc”)
}
Chương trình này sẽ hiển thị dòng đầu tiên là dòng “chuong trinh bat dau”, sau đó
xuống dòng ,màn hình giao tiếp với máy tính sẽ chờ bạn nhập từng giá trị của dãy a[i],
hiển thị giá trị thập phân và thập lục phân này lên màn hình giao tiếp với máy tính ,và
hiển thị giá trị nhị phân lên 8 LED đơn của máy Board Spartan-3 Starter, và cứ tiếp tục
như vậy khi các bạn nhập xong 100 giá trị (bất kì bằng đường nào,miễn là truyền qua
cổng RS-232), thì màn hình xuất ra dòng “chuong trinh ket thuc”
Các hàm XuartLite_RecvByte, và hàm Xgpio_mSetDataReg là hàm được viết sẵn ,các
bạn nên tìm hiểu các hàm này, nó nằm trong các ngoại vi tương ứng, ví dụ hàm
XuartLite_RecvByte nằm trong ngoại vi UART(RS232) còn hàm Xgpio_mSetDataReg
nằm trong ngoại vi GPIO(Led 8 bit), muốn xem các hàm này các bạn vào Tab System ,
chọn ngoại vi tương ứng :
Ở trong phần Driver, các bạn nhấn chuột phải ,chọn View API Doc để xem thư viện
các hàm viết sẵn, một điều lưu ý là không phải tất cả các ngoại vi đều có hàm viết sẵn .
Như vậy chúng ta đã xong phần hệ thống và chương trình điều khiển, tiếp theo, các bạn
cho dịch chương trình , nhấn vào nút trên thanh công cụ để dịch,lưu ý thời gian dịch
là rất lâu, có thể gần 10 phút, và trong khi dịch, máy sẽ tận dụng toàn bộ khả năng của
CPU, và làm cho CPU rất nóng, có thể máy sẽ khởi động lại do nhiệt độ quá cao, nên các
bạn cần giải nhiệt tốt cho CPU để tránh tình trạng khởi động lại của máy, nếu không
chúng ta sẽ phải làm lại từ đầu
Sau khi dịch xong, để giao tiếp với máy tính, chúng ta dùng chương trình Hyper
Terminal , là chương trình Window hỗ trợ sẵn để sử dụng cổng truyền bất đồng bộ
UART trên máy tính, bật chương trình Hyper Terminal lên :
EME-ST09
www2.hcmut.edu.vn/~vkchau/

Đặt tên cho chương trình (chỉ là thủ tục), nhấn OK để chọn cổng COM1,nhấn OK
dtie61p theo để chọn tốc độ truyền, bit kiểm tra chẵn lẽ…,lưu ý là phải đồng bộ với tốc
độ của cổng UART của MicroBlaze mà chúng ta đã chọn từ đầu:

Như vậy là Kit của chúng ta đã có thể giao tiếp với máy tính qua cổng truyền bất đồng
bộ
Nối dây truyền dữ liệu (sử dụng cổng 25 chân trên máy tính) và cổng nối tiếp để tryền
chương trình từ phần mềm xuống Kit và giao tiếp giữa Kit và máy tính,lưu ý phải đúng
chân ,nếu không muốn Kit có thể hư
Sau đó , nạp (nhúng) toàn bộ hệ thống vào Kit bằng nút thì chúng ta đã có một hệ
thống hoạt động độc lập có thể giao tiếp với thiết bị khác (ở đây là máy tính), trong
trường hợp này, Kit của chúng ta sẽ là máy chủ ,còn máy tính là ngoại vi để giao tiếp
Chương trình mô phỏng sẽ được gởi kem theo File .wrf
Kết quả của chương trình Hyper Termainal sau khi chạy chương trình:
EME-ST09
www2.hcmut.edu.vn/~vkchau/

Giá trị nhị phân sẽ được hiển thị trên 8 LED đơn của Kit từ Led 1->Led 8,kết quả các
bạn xem trong File .wrf

Các bạn cũng có thể tạo ra một ngoại vi riêng để gioa tiếp với MicroBlaze, chẳng hạn
giao tiếp với bàn phím qua cổng PS2 có sẵn trên Kit, tuy nhiên, muốn viết được giao tiếp
này thì các bạn phải nắm vững ngôn ngữ VHDL hoặc Verilog HDL, sử dụng phần mềm
ISE để thiế kế, và vấn đề là các bạn phải viết toàn bộ các giao thức , các thư viện cho
ngoại vi mới tạo ra, EDK 7.1i không hỗ trợ viết bằng C, bạn nào quan tâm thì xin tìm
hiểu mục :Craet and Import Peripheral Wizard trong File est_rm.pdf
Đây là chương trình mới, tài liệu ít nên trong khi viết có ít nhiều sai sót, mong các bạn
bỏ qua