GIAO TIẾP VỚI MÁY TÍNH THÔNG QUA JTAG UART (TT)
Sinh viên thực hiện:
1. Họ và tên: ... MSSV: ... 2. Họ và tên: ... MSSV: ... Thời gian thực hiện: 4 tiết.
Mục tiêu
Bài thực tập này nhằm mục đích giúp sinh viên tìm hiểu về phương thức giao tiếp UART giữa máy tính và hệ thống nhúng.
Yêu cầu
Dựa vào các ngoại vi, chức năng hỗ trợ của board DE2-115 đã được tìm hiểu ở lab1 kết hợp với các phương thức giao tiếp giữa hệ thống và máy tính được thông qua JTAG UART để thiết kế một hệ thống có khả năng:
1. Nhập một ký tự bất kỳ từ Terminal, sau đó nhận một dãy ký tự.
2. Đếm số lần xuất hiện ký tự đó trong dãy ký tự đã nhập và hiển thị lên LED 7 đoạn.
Các bước thực hiện
Các bước thực hiện để xây dựng hệ thống hoàn toàn giống so với các bước ở lab4, chỉ cần thay đổi đoạn chương trình điều khiển.
Đoạn code điều khiển: #include <system.h>
char text_string[] = "Nhap so co 4 chu so:\n> \0"; char chr_string[] = {}; // mang luu du lieu nhan duoc tu JTAG UART
char code_7seg[] = { 0x3F, //0 0x06, //1 0x5B, //2 0x4F, //3 0x66, //4 0x6D, //5
76 0x7C, //6 0x07, //7 0x7F, //8 0x67, //9 0x77, //A 0x7C, //B 0x39, //C 0x5E, //D 0x79, //E 0x71 //F};
char buffer_7seg[] = {0,0,0,0,0,0,0,0};// mang luu gia tri se hien thi len LED7doan
volatile int * JTAG_UART_ptr = (int *) JTAG_UART_BASE; // JTAG UART address
char first_time=0,first_time_str=0,status=0, mode=0, kytu=0, count =0;
void Hex(char number, char order_7seg ){ volatile int * HEX3_0 = (int *) HEX3_0_BASE; volatile int * HEX7_4 = (int *) HEX7_4_BASE; buffer_7seg[order_7seg] = code_7seg[number]; *(HEX3_0) = *(int *) (buffer_7seg);
*(HEX7_4) = *(int *) (buffer_7seg+4);} /*Xoa tat ca cac LED7doan*/
void Clear_Display(){ char count;
for (count=0; count <8; count++){ Hex(0, count);
}}
77
void put_jtag( volatile int * JTAG_UART_ptr, char c){
int control;
control = *(JTAG_UART_ptr + 1); // read the JTAG_UART
//control register
if (control & 0xFFFF0000) // if space, then echo //character, else ignore
{
*(JTAG_UART_ptr) = c; }
}
/*Hien thi du lieu len LED7doan*/ void Hex_display(char j)
{int i;
for (i = 0; chr_string[i] != 0; ++i) { Hex (chr_string[i], j--); chr_string[i]=0; }} void Nhap_ky_tu() { int data; if (first_time ==0){ first_time =1;
printf ("Nhap ky tu: ");}
data = *(JTAG_UART_ptr); // doc thanh ghi du lieu JTAG_UART
if(data & 0x00008000)//kiem tra bit RVALID {
data = data & 0x000000FF; // 8 bit cuoi cua thanh ghi data
78
if (data!=10) // neu data khac phim {
kytu=data; }
if (data =10) {mode=1; data=0;} } } void Nhap_chuoi_ky_tu() { int data; if (first_time_str ==0) { first_time_str =1;
printf ("Nhap chuoi ky tu: "); }
data = *(JTAG_UART_ptr); // doc thanh ghi du lieu JTAG_UART
if (data & 0x00008000) // kiem tra bit RVALID {
data = data & 0x000000FF; // 8 bit cuoi cua thanh ghi data
if (data!=10) // neu data khac phim { if (data==kytu) count ++;} if ( data ==10){ Hex (count, 1); }}} int main(void) { char stage; //char mode =0; while(1){
79 switch (mode){ case 0: { Nhap_ky_tu(); break;} case 1: { Nhap_chuoi_ky_tu(); break; }}}}
Tiến hành biên dịch và nạp chương trình cho phần cứng.
Hình 4.5.1Kết quả biên dịch thành công
Demo hệ thống
Sau khi đã biên dịch và nạp thành công tất cả các quá trình trên, tiến hành chạy thử để kiểm tra chương trình.
Nhập một ký tự bất kì từ Terminal, sau khi nhấn phím Enter ta tiếp tục nhập một dãy ký tự bất kì. Kết quả hiển thị thu được trên các
80
LED 7 đoạn là số lần xuất hiện ký tự đó trong dãy ký tự đã nhập, các giao tiếp giữa hệ thống và máy tính được thông qua JTAG.
VD:
o Ở đây ta nhập ký tự “i”.
o Tiếp tục nhập dãy ký tự “giadinh” sau khi nhấn Enter.
o Kết quả hiển thị ra LED 7 đoạn là số 2 (vì ký tự “i” xuất hiện 2 lần trong dãy ký tự “giadinh”.
Hình 4.5.2 Kết quả sau khi nhập ký tự “i” và dãy ký tự “giadinh”
Hình 4.5.3 Kết quả hiển thì ra LED 7 đoạn Kết quả đạt được
Qua bài thực tập này, sinh viên củng cố được các kiến thức đã được vận dụng ở các bài thực tập trước, đồng thời xây dựng được hệ thống nhúng hoàn chỉnh có khả năng giao tiếp với máy tính thông qua JTAG_UART để có thể nhập một ký tự bất kỳ từ Terminal, sau đó nhận một dãy ký tự kết quả đếm số lần xuất hiện ký tự đó trong dãy ký tự đã nhập và hiển thị lên LED 7 đoạn.
81