59
1 HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG KHOA KỸ THUẬT ĐIỆN – ĐIỆN TỬ 1 ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC Đề tài: Phát triển hệ thống thu nhận hình ảnh sử dụng bộ VXL java-Kit aJ-200MEK Giảng viên hướng dẫn : TS. NGUYỄN NGỌC MINH Sinh viên thực hiện: PHẠM VĂN HẢI Lớp : D07KTDT1 Khoá : 2007-2012 Hệ : Chính quy Hà Nội, tháng 11 /2009 GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Chip AJ200

  • Upload
    son-ha

  • View
    69

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Chip AJ200

1

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNGKHOA KỸ THUẬT ĐIỆN – ĐIỆN TỬ 1

ĐỒ ÁNTỐT NGHIỆP ĐẠI HỌC

Đề tài: Phát triển hệ thống thu nhận hình ảnh sử dụng bộ VXL java-Kit aJ-200MEK

Giảng viên hướng dẫn : TS. NGUYỄN NGỌC MINH

Sinh viên thực hiện: PHẠM VĂN HẢI

Lớp : D07KTDT1

Khoá : 2007-2012

Hệ : Chính quy

Hà Nội, tháng 11 /2009 GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 2: Chip AJ200

2

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNGKHOA KỸ THUẬT ĐIỆN – ĐIỆN TỬ 1

ĐỒ ÁNTỐT NGHIỆP ĐẠI HỌC

Đề tài: Phát triển hệ thống thu nhận hình ảnh sử dụng bộ VXL java – Kit aJ-200MEK

Giảng viên hướng dẫn : TS. NGUYỄN NGỌC MINH

Sinh viên thực hiện: PHẠM VĂN HẢI

Lớp : D07KTD1

Khoá : 2007-2012

Hệ : Chính quy

Hà Nội, tháng … /2009

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 3: Chip AJ200

3

MỞ ĐẦU

Với sự phát triển mạnh mẽ của nền công nghiệp điện tử, có rất nhiều các thiết bị điện tử đã ra đời thay làm thay đổi nhiều mặt trong cuộc sống. Con người có nhiều cách tiếp cận, các tiêu chuẩn khác thay thế với các cách thức truyền thống. Các thiết bị số cá nhân di động là một dòng thiết bị thể hiện rõ nhất điều đó, nó gần như đã tạo lên một văn hóa trong cuộc sống con người.

Với mục đích áp dụng các kiến thức thiết kế điện tử đã biết, và bước đầu làm quen với phương thức thiêt kế hệ thống nhúng sử dụng bộ VKL Java-32bit để xây dựng một ứng dụng thực tế - một ứng dụng nhỏ về quay video sử dụng bộ Kit aJ-200MEK. Dữ liệu hình ảnh sẽ được thu nhận qua một sessor sau đó đưa qua bộ xử lí chính, lưu trữ vào trong bộ nhớ chính, và hiển thị lên màn hình LCD.

Nội dung của đồ án này bao gồm những phần sau:Phần I: Java

Phần II: Giới thiệu về bộ VXL JavaPhần III: Quy trình xây dựng một ứng dụng trên Kit aJ-200MEK

Các tài liệu tham khảo, sử dụng trong đồ án này đều được ghi lại tại mục Tài liệu tham khảo. Đồ án đã có những kết quả nhất định song do hạn chế về mặt thời gian và kiến thức nên trong đồ án này ko thể tránh được những thiếu sót, rất mong được sự đánh già và bổ sung của các thầy cô và các bạn.

Em xin chân thành cảm ơn!

Sinh viên thực hiện

Phạm Văn Hải

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 4: Chip AJ200

4

Phần I : Java

1. Ngôn ngữ lập trình Java

1.1 Giới thiệu chung

Java là một nền tảng phát triển các ứng dụng phần mềm có vị trí rất lớn trong những năm cuối thế kỉ 20, đầu thế kỉ 21. Đánh dấu sự trưởng thành của mô hình lập trình hướng đối tượng, nó được coi là một nền tảng mang tính cách mạng trong ngành phần mềm. Mô hình máy ảo Virtual Machine đã cho phép các ứng dụng viết bằng Java có thể chạy trên nhiều hệ điều hành khác nhau.

Lần đầu tiên xuất hiện vào năm 1992, như là một ngôn ngữ dùng trong nội bộ tập đoàn Sun Microsystems để xây dựng ứng dụng điều khiển các bộ xử lý bên trong máy điện thoại cầm tay, lò vi sóng, các thiết bị điện tử dân dụng khác. Không chỉ là một ngôn ngữ, Java còn là một nền tảng phát triển và triển khai ứng dụng trong đó máy ảo Java, bộ thông dịch có vai trò trung tâm.

Sun, công ty đã phát minh ra ngôn ngữ Java, chính thức ban hành bộ công cụ phát triển bản Java Development Kit 1.0 vào năm 1996 hoàn toàn miễn phí để các nhà phát triển có thể tải về, học Java, xây dựng các ứng dụng Java và triển khai chúng trên các hệ điều hành có hỗ trợ Java. Ban đầu, Java chủ yếu dùng để phát triển các applet - các ứng dụng nhúng vào trình duyệt web, góp phần làm

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 5: Chip AJ200

5

sinh động các trang web tĩnh vốn hết sức tẻ nhạt hồi dó. Tuy nhiên, cùng với sự phát triển của công nghệ thông tin và nhu cầu của xã hội, Java applet đã dần mất đi vị trí của nó và thay vào đó, các công ty, cộng đồng ủng hộ Java đã phát triển nó theo một hướng khác. Ngoài ra, Java còn được dùng để phát triển các applications – các ứng dụng độc lập. Các bước phát triển một ứng dụng Java:

Hình 1.1.1.1: Các bước phát triển một ứng dụng Java

Hiện nay, công nghệ Java được chia làm ba bộ phận:

J2SE (Java 2 Standard Edittion)

Gồm các đặc tả, công cụ, API - giao diện lập trình ứng dụng của Java giúp phát triển các ứng dụng trên desktop và các máy tính kiểu trạm làm việc.

J2EE (Java 2 Enterprise Edition)

Gồm các đặc tả, công cụ, API mở rộng J2SE để phát triển các ứng dụng qui mô xí nghiệp, chủ yếu để chạy trên máy chủ (server). Bộ phận hay được nhắc đến nhất của công nghệ này là công nghệ Servlet/JSP: sử dụng Java để xây dựng các ứng dụng trên nền tảng web server.

J2ME (Java 2 Micro Edition)

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 6: Chip AJ200

6

Gồm các đặc tả, công cụ, API mở rộng để phát triển các ứng dụng Java chạy trên điện thoại di động, thẻ thông minh, thiết bị điện tử cầm tay, robo và những ứng dụng điện tử khác.

Lúc đầu, các Java IDE tập trung vào phát triển J2SE. Tuy nhiên, khi J2EE đạt được sự chấp thuận rộng rãi, các nhà cung cấp tiến hành hỗ trợ phát triển các ứng dụng sử dụng J2EE vào các IDE của họ. J2ME là bộ phận được phát triển sau cùng. Tuy nhiên, nhiều chuyên gia đã dự đoán về sự phát triển lớn mạnh của thị trường phát triển các ứng dụng J2ME, các nhà cung cấp đã đưa ra các phiên bản mở rộng cho các sản phẩm IDE của họ để hỗ trợ thêm J2ME. Ngoài ra, cácnhà cung cấp chuyên nghiệp cũng đã phát triển các IDE J2ME đơn.

Java đã trải qua 3 bước phát triển quan trọng: Java 1.0 gắn liền với bản JDK đầu tiên, Java 2 gắn với JDK 1.2 và Java 5 gắn với J2SDK 1.5

Ngày nay, khi nhắc đến Java người ta không còn chỉ nhắc đến Java như là một ngôn ngữ mà nhắc đến Java như là một công nghệ hay một nền tảng phát triển. Nó bao gồm các bộ phận:

- Máy ảo Java: JVM

- Bộ công cụ phát triển: J2SDK

- Các đặc tả chi tiết kĩ thuật (specifications)

- Ngôn ngữ lập trình (programming language)

1.2 Một số điểm nổi bật của Java so với các ngôn ngữ lập trình khác

Các ngôn ngữ lập trình được ra đời từ rất lâu, và tính cho đến nay đã có tới hàng chục loại khác nhau. Tuy nhiên số này được phân chia ra làm 2 loại, các ngôn ngữ lập trình bậc thấp và các ngôn ngữ lập tnình bậc cao. Những ngôn ngữ lập trình bậc thấp, (điển hình nh assembler) hỗ trợ rất ít cho ngời sử dụng, các câu lệnh thường khó hiểu vì nó đòi hỏi bạn phải trực tiếp điều khiển việc giao tiếp với máy và các ngôn ngữ bậc cao (có hỗ trợ cho ngời lập trình thông qua chơng trình dịch và một số môđun có sẵn - chẳng hạn như Turbo Pascal, C, Java...). Tất

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 7: Chip AJ200

7

nhiên nếu phải chọn lựa giữa ngôn ngữ lập trình bậc thấp và ngôn ngữ lập trình bậc cao, hầu hết các lập trình viên sẽ chọn giải pháp thứ hai vì họ sẽ tiết kiệm đợc nhiều thời gian, công sức và đạt hiệu quả cao hơn (ví dụ như phải viết một chương trình để truyền file giữa 2 máy qua mạng điện thoại, với ngôn ngữ assembler bạn cần phải có một khối lưỡng công việc cực kì lớn, với khoảng vài trăm dòng lệnh trong khi đó, nếu bạn thông thạo Java, bạn sẽ thấy điều này chẳng có gì khó khăn cả - đơn giản là viết vài chục dòng lệnh mà thôi).

Khác với phần lớn ngôn ngữ lập trình thông thường, thay vì biên dịch mã nguồn thành mã máy hoặc thông dịch mã nguồn khi chạy, Java được thiết kế để biên dịch mã nguồn thành bytecode, bytecode sau đó sẽ được môi trường thực thi (runtime environment) chạy. Bằng cách này, Java thường chạy chậm hơn những ngôn ngữ lập trình thông dịch khác như C++, Python, Perl, PHP, C#... và cú pháp trong Java được vay mượn nhiều từ C & C++. Tuy nhiên, Java có cú pháp hướng đối tượng đơn giản hơn và có tính năng xử lý cấp cao hơn. Do đó việc viết một chương trình bằng Java dễ hơn, đơn giản hơn, đỡ tốn công sửa lỗi hơn. Dùng bộ thư viện chuẩn KFC, nhiều đoạn code Java chỉ mất vài dòng trong khi C phải mất cả trang giấy. Lập trình C rất hay xảy ra lỗi và khó sửa.

Chương trình phần mềm viết bằng Java có thể chạy trên mọi nền tảng (platform) khác nhau thông qua một môi trường thực thi với điều kiện có môi trường thực thi thích hợp hỗ trợ nền tảng đó. Khả năng này thường được gọi là "viết một lần, chạy mọi nơi" (write once, run anywhere) là một lợi thế cực lớn. Môi trường thực thi của Sun Microsystems hiện hỗ trợ Sun Solaris, Linux, Mac OS, FreeBSD & Windows.

Ban đầu Sun Microsystems đã nghĩ ra Java Vỉtual Machine(JVM) – máy ảo Java để hỗ trợ các ứng dụng Java biên dịch bytecode, và cho tới nay đã sản xuất được 4.5 tỉ JVM. Không đúng khi nói rằng trình biên dịch Java không biên dịch ra mã máy - machine code. Thực chất file code Java sau khi đưa vào trình biên dịch sẽ được biên dịch ra thành bytecode dành cho cái máy ảo Java. Trên các platform thực, Java Runtime Environment (JRE) sẽ cho phép JVM biện dịch lại toàn bộ bytecode thành code gốc của platform đó. Để cho các

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 8: Chip AJ200

8

chương trình Java chạy trên nhiều platform khác nhau, Sun chỉ việc port cái emulator, tức JRE, sang các platform đó. Nhờ vậy mà một chương trình Java đồ sộ viết cho máy tính, đem sang điện thoại di động vẫn chạy được bình thường.

Cụ thể một số đặc điểm nổi bật của ngôn ngự lập trình Java so với các ngôn ngữ lập trình khác:

• Đơn giản (simple)

• Hướng đối tượng (Object - oriented)

• Độc lập với cấu trúc (architecture neutral).

• Mạnh mẽ (robust)

• An toàn (secure)

• Di động (portable.

• Đa luồng (multithreaded)

• Động(dynamic)

• Network-savvy

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 9: Chip AJ200

9

• Có thể thông dịch(interpreted)

1.3. Cấu hình thiết bị

Hiện nay Sun Microsystem đã đưa ra 2 dạng cấu hình thiết bị.

1. CLDC : Cấu hình thiết bị kết nối giới hạn, CLDC được thiết kế để nhắm vào thị trường các thiết bị cấp thấp (low-end), các thiết bị này thông thường là máy điện thọai di động và PDA với khoảng 512 KB bộ nhớ.Vì tài nguyên bộ nhớ hạn chế nên CLDC được gắn với Java không dây (Java Wireless ), dạng như cho phép người sử dụng mua và tải về các ứng dụng Java, ví dụ như là Midlet.

2. CDC : Cấu hình thiết bị kết nối, CDC được đưa ra nhắm đến các thiết bị có tính năng mạnh hơn dòng thiết bị thuộc CLDC nhưng vẫn yếu hơn các hệ thống máy để bàn sử dụng J2SE. Những thiết bị này có nhiều bộ nhớ hơn (thông thường là trên 2Mb) và có bộ xử lý mạnh hơn. Các sản phẩm này có thể kể đến như các máy PDA cấp cao, điện thoại web, các thiết bị gia dụng trong gia đình …

Cả 2 dạng cấu hình kể trên đều chứa máy ảo Java (Java Virtual Machine - JVM) và tập hợp các lớp (class) Java cơ bản để cung cấp một môi trường cho các ứng dụng J2ME. Tuy nhiên cần chú ý rằng đối với các thiết bị cấp thấp, do hạn chế về tài nguyên như bộ nhớ và bộ xử lý nên không thể yêu cầu máy ảo hổ trợ tất cả các tính năng như với máy ảo của J2SE, ví dụ, các thiết bị thuộc CLDC không có phần cứng yêu cầu các phép tính toán dấu phẩy động, nên máy ảo thuộc CLDC không được yêu cầu hỗ trợ kiểu float và double.

Bảng so sánh các thông số kỹ thuật của CDC và CLDC

Thông số CLDC CDC

Ram >=32K,<=512K >=256K

Rom >=128k,<=512k >=512k

Nguồn năng Có giới hạn (nguồn pin) Không giới hạn

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 10: Chip AJ200

10

lượng

Network Chậm Nhanh

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 11: Chip AJ200

11

Phần II : Giới thiệu về bộ VXL Java

Dòng chip aJ-200

Giới thiệu chung

Hình 2.1.1.2: Dòng chip aJ-200

Dòng chip aJ-200 của aJile là sản phẩm chip SOC thứ ba, nó thực hiện các trực tiếp các tập lệnh bytecode cho Java Virtual Machine (JVM), và các hệ thống Java thời gian thực cơ bản. Bytecode JVM sẽ thực hiện việc loại bỏ các thông dịch và các lớp phần mềm JIT đặc trưng, và thực hiện tối ưu hóa cho các yêu cầu về bộ nhớ và thời gian. Dựa trên nền tảng về chip Java cơ bản, dòng chip aJ-200 luôn thực hiện các tác vụ, đồng bộ hóa các đối tượng, lập trình và xử lí ngắt một cách nhanh chóng.

Chip aJ-200 rất thích hợp để sản xuất các sản phẩm thiết bị đầu cuối POS di động, các thiết bị cầm tay, các webpad, hệ thống điều khiển cá nhân, các thiết bị chơi game và đồ chơi, IP camera, hệ thống video giám sát, và các ứng dụng nhỏ khác.

1.1. Bộ xử lí Java trong chip aJ-200

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 12: Chip AJ200

12

Bộ xử lí Java này của aJile là dòng thế hệ thứ 3 sử dụng năng lượng thấp, thực hiện trực tiếp các xử lí trên nền tảng JME Java, “Java processor”. Nó được ứng dụng để thiết kế các dòng thiết bị nhúng đa phương tiện, và các ứng dụng internet di động. Bộ xử lí này bao gồm một lõi JEMCore-II nâng cao với byte, half word, word opteration, một gói dữ liệu DSP, 32KB bộ nhớ I&D, bus AHB, giao diện APB, và giao diện JTAG. Sơ đồ các khối của bộ xử lí Java được mô tả như hình vẽ dưới đây.

Hình 2.1.1.3: Các khối chức năng trong bộ xử lí Java trong chup aJ-200

1.2. Lõi xử lí JMECore – II

JEMCore-II thực hiện trực tiếp các lệnh bytecode Java Vỉtual MachineTM (JVM), real-time Java cơ bản và một số các lệnh bytecode mở rộng cho multimedia và các ứng dụng nhúng trong mạng. JEMCore-II cải thiện hiệu quả thực hiện các lệnh Java việc loải bỏ lớp trình diễn Java và nhân RTOS. Kết quả dẫn đến thời gian chuyển đổi ngữ cảnh thread-to-thread được giảm đáng kể(<1µs). Vì tập lệnh bytecode được thực hiện như các lệnh cơ bản nên JEMCore của Java hoạt động giồng như bộ xử lí RISC thực hiện vệc biên dịch trong C. Thêm vào đó, các hoạt động Java cơ bản (wait, yield, thông báo, giảm

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 13: Chip AJ200

13

sát việc enter/exit) được thực hiện như các lệnh bytecode mở rộng, loại bỏ các yêu cầu cho một RTOS truyền thống. Dựa trên sự phong phú của nền tảng Java multimedia , JEMCore-II đã được cải tiến với một microcode chuyên dụng-dựa trên dữ liệu DSP-để làm tăng thêm các thuật toán khác nhau cho các ứng dụng audio, điều khiển nhúng, điều khiển động cơ phụ, ghi lại giọng nói và chữ viết tay.

Hình dưới minh họa đơn giản các khối của lõi JEMCore-II cải tiến:

Hình 2.1.1.4: Sơ đồ khối lõi JMECore - II

1.3. Các đặc tính của hệ thống aJ-200

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 14: Chip AJ200

14

Bộ xử lý Java 32-bit

• Các tập lệnh bytecode cơ bản

• Các tập lệnh bytecode mở rộng

• Các phép toán số học sử dụng dấu phẩy động theo chuẩn

IEEE-754

• Fixed-point Multiplier Accumulator (MAC)

• Lõi nhúng RTOS

o Thực hiện thread-to-thread ít hơn 1us

• Hai máy ảo Java độc lập trong phần cứng

• Cho phép ghi 32KB (writeable control store–WCS

32 KB Unified instruction & Data Cache

Giao diện BUS ngoài (External Bus interface – EBI)

• FLASH (NOR & NAND), ROM, SRAM

• SDRAM và SDRAM động

Điều khiển ngắt bởi các thiết bị ngoại vi

Ba bộ Timer/Counter 24-bit

Tám bộ điều chế độ rộng xung ( Pulse Width Modulations – PWM)

Bộ giám sát Timer

Four 16550 Compatible UART’s

General Purpose I/O Ports

Điều khiển truy cập trực tiếp bộ nhớ-DMA (Direct Memory Access)

Cổng đồng bộ nối tiếp (SSP-Synchronous Serial Port)

Giao tiếp I2S/AC97/SPI

Giao tiếp I2C

Hỗ trợ thẻ nhớ SD/ SDIO/ MMC

CF Memory Card Interface version 1.4GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 15: Chip AJ200

15

Chip đơn điều khiển USB OTG phiên bản 2.0

Chip đơn điều khiển 10/100 T-Base Ethernet

Mã hóa/giải mã máy

Màn hình LCD

• Giao diện TFT LCD 24-bit

• Độ phân giải lên tới 1280x1280

• Chế độ đầu vào (RGB, bảng màu, YcbCr422/420)

• 256 entries 16-bit RGB color palette RAM

• 2 cửa sổ PiP

• Picture out of Picture (PoP)

• Định dạng đầu ra (bảng màu RGB, ITU-R BT, 656)

• Video Scalar (up & down)

• Cổng video ra (ITU-R BT. 656)

Ba cổng lấy ảnh

• Độ phân giải 1920x1080

• Định dạng đầu vào(ITU-R BT. 656/.1120, YCrCb 4:2:2)

• Định dạng đầu ra(RGB 888/565, YCbCr 4:4:4, 4:2:2, 4:2:0)

Hỗ trợ các định dạng media

• Định dạng MPEG-4 đơn giản chuẩn L0 ~ L3

• Sub QCIF, QCIF, CIF, VGA, 4CIF, & D1

• Chuẩn hình ảnh JPEG (ISO/IEC 10918-1) cơ bản

• Short video header (H.263 baseline)

• Các phương pháp lượng tử hóa H.263/MPEG/JPEG

Giao diện JTAG chuẩn IEEE 1149.1

Clock and PLL’s

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 16: Chip AJ200

16

Fully static operation up to 180 MHz

• Core @ 1.8V

• I/O’s @ 1.8, 2.5V or 3.3V

• Commercial temperature

Chip xử lý CMOS chỉ 0.18um

Package

• 324-pin TFBGA

• 13 mm x 13 mm (0.65 mm ball pitch)

• Tương thích ROHS

Hình 2.1.1.5: Sơ đồ khối dòng Kit sử dụng Kit aJ-200GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 17: Chip AJ200

17

2. Dòng Kit aJ-200MEK

2.1. Giới thiệu chung

Hình 2.1.1.6: Bộ Kit aJ-200MRK

Kit aJ-200MEK là một sản phẩm của aJile, nó là một bộ kit nhỏ gọn và đa năng với aJ-200 SOC thực hiện linh hoạt các xử lý với Java Vỉtual Bytecode, dựa trên các nền tảng về JAVA cơ bản, network, đồ họa, định dạng video MPEG4, và các khối chức năng I/O. Kit aJ-200MEK được thiết kế với một màn hình cảm ứng kích thước 800x480, một thiết bị CMOS, một video định dạng MPEG4, âm thanh stereo, và cấu hình kiểu I/O đặc thù cho các thiết bị đa phương tiện di động qua mạng Internet.

Sử dụng các ưu thế của Java IDEs, người phát triển ứng dụng có thể tạo ra các ứng dụng được viết hoàn toàn dùng ngôn ngữ lập trình Java với hiệu suất và hiệu quả bộ nhớ của hệ thống cao. Kit aJ-

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 18: Chip AJ200

18

200MEK giúp người sử dụng phát triển các thế hệ sản phẩm đa phương tiện dựa vào các ứng dụng đa phương tiện di động qua mạng Internet như IP camera, webs, các máy chủ camera, các thiết bị cầm tay và các ứng dụng nhỏ khác.

Sơ đồ các khối của Kit aJ-200MEK được mô tả như hình dưới:

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 19: Chip AJ200

19

Hình 2.1.1.7: Sơ đồ các khối trên Kit aJ-200MEK

2.2. Các đặc tính của bộ Kit aJ-200MEK

Bộ xử lý:

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 20: Chip AJ200

20

• aJile network media direct execution SOC “aJ-200” for

the JME platform

Cấu hình bộ nhớ:

• 32 MB SDRAM

• 32 MB NAND Flash

Màn hình cảm ứng:

• Optrex 5” TFT panel

• Độ phân giải 800x480

• Sử dụng 24-bit màu

• Màn hình cảm ứng và backlight

Các thiết bị vào:

• Màn hình cảm ứng

• Các phím số

o Các phím gần giống trên bàn phím điện thoại

o 4 phím thô

o 4 phím mũi tên các hướng

Cổng Ethernet 10/100 base-T:

• Bộ nối RJ-45

Hai kênh dẫn:

• RS 232

• Bộ nối DB9M

Cổng USB:

• Cổng kết nối USB loại A

Các khe cắm mở rộng:

• SD/SDIO

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 21: Chip AJ200

21

• Thẻ nhớ

• WLAN 802.11b/g

Cổng thu video:

• VGA

• 8-bit YcrCb

• Omnivision CMOS sensor “OV7740”

Các định dạng media:

• MPEG-4 các chuẩn đơn giản L0~L3

• Sub QCIF, QCIF, CIF, VGA, 4CIF, and D1 @ 30 fps

• JPEG (ISO/IEC 10918-1)

• Short video header (H.263 baseline)

• H.263/MPEG/JPEG

Các định dạng audio:

• AC97 compliance

• Left and right audio input

• Left and right audio output

• Speaker (8Ω) header

• Microphone

Đồng hồ thời gian thực hỗ trợ một pin cổng GPIO 8-bit, bộ nối UMTS/HSDPA:

• 50-pin slimstack receptacle

• Cinterion HC-25/28 module (option)

Bộ nối module Zigbee:

• 20-pin header

• Xbee/Xbee-Pro module (option)

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 22: Chip AJ200

22

Trạng thái các LED:

• Ethernet port

• USB port

• SD slot

• WLAN

• UMTS/HSPDA

• Zigbee

• Power on

Nguồn nuôi:

• Nguồn ngoài 100-240V 5V/3A DC.

• Pin @ 3.7V 1800 mAhcó thể nạp lại được

JTAG:

• Giao diện debug

• Nguồn cấp 5V qua cổng USB

• Debug qua kênh nối tiếp

2.3. Hệ thống hỗ trợ phát triển

Kit aJ-200MEK đi kèm với aJile RTOS, nó là một ứng dụng builder tối ưu (JEMBuilder) và cung cấp một công cụ debugging hoàn chỉnh dựa trên silicon-base cho nền tảng JEM. Các thành phần chính bao gồm:

aJile RTOS:

aJile RTOS được thực hiện hoàn toàn bằng ngôn ngữ Java ( hình minh họa). Ngoài ra, aJile Multiple JVM ( MVM) cho phép nhiều ứng dụng thực hiện một cách đồng thời và độc lập theo một lịch trình nhất định một cách nhanh chóng. Điều này cho phép các ứng dụng cứng real-time chạy độc lập và an toàn với các ứng dụng mạng.

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 23: Chip AJ200

23

Hình 2.1.1.8: Hê thống aJile RTOS

Các thành phần chính của một hệ điều hành thời gian thực aJile:

• JME API’s

o CLDC 1.1

o CDC 1.1/Foundation Profile (FP)

o MIDP2.0

• Stack mạng, file hệ thống, và định khung an toàn:

o chạy trên các thư viện TCP/IPJME và bổ sung aJile's Java của

JNI, các đồ họa gốc

o Ngăn xếp mạng TCP/IP bao gồm các dịch vụ PPP, DHCP, DNS,

SNMP

o File hệ thống định dạng FAT 32 cho USB và các thẻ nhớ SD

o stack USB 2.0 chủ/khách

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 24: Chip AJ200

24

o Định khung an toàn

o Bộ nạp khởi động cho việc cập nhật các ứng dụng.

• Các driver cho các phần mềm Java:

o Hợp nhất tất cả các I/O

o Điều khiển nối tiếp qua cổng ÚB cho bọ nhớ, bàn phím, và chuột

o Thé nhớ SD, WLAN card

• aJile Real-time OS Kernel

Bên trong bộ xử lý aJile chứa một lõi thời gian thực nhỏ đã được lập trình. Nó thực hiện các chức năng quen thuộc của hệ điều hành như: lập chương trình, chuyển chương trình, xử lý ngắt, xứ lý các lỗi và đồng bộ hóa các đối tượng). Ngôn ngữ Java cơ bản được dùng trong các bộ xử lý của aJile, và nó sử dụng các tập lệnh bytecode mở rộng để thực hiện thêm các hoạt động trong Applications ( trạng thái ngủ, chờ, các thông báo, yield, quản lí nhập, quản lí xuất, và ngắt) để hỗ trợ việc điều hành hệ thống một cách nhanh chóng và không bị gián đoạn. Các chip thời gian thực quản lí các hoạt động dựa trên mức độ ưu tiên của các chúng với thời gian chuyển đổi vô cùng nhanh- ít hơn 1 µs.

Ngoài ra, kỹ thuật Multiple JVM (MJM) của aJile còn cho phép các ứng dụng chạy một cách đồng thời và độc lập theo một lịch trình nhất định. Mỗi JVM tận dụng các đặc trưng riêng của mình và bộ nhớ để cho phép các ứng dụng chạy một cách đồng thời, độc lập với các ứng dụng trên mạng và không bị tạm dừng khi có các “cảnh báo rác”- garbage collection (G.C) và các ngắt khác. MJM có chể độ bảo mật “sandbox” Java đến cấp độ tiếp theo, cung cấp một cơ chế để dễ dàng cách ly các ứng dụng và phân chia tài nguyên hệ thống. aJile RTOS cho phép các ứng dụng cứng real-time có thể chạy một cách độc lập và an toàn song song với các ứng dụng mạng.

2.4 Môi trường phát triển

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 25: Chip AJ200

25

Môi trương phát triển như Eclipse hay Netbeans cho phép sử dụng các “off-the-shelf “IDE để tạo ra các file chuẩn Java.Nó thực hiện các công việc chính sau:

• Tối ưu hóa Linker/Xây dựng các ứng dụng Applications builder ( JEMBuilder)

• Các công cụ debugging ứng dụng

• Multimedia Evaluation Kit

o aJ-200MEK board

o Bộ chuyển đổi JTAG – to - USB

o USB cable

o AC power adapter

o Các sơ đồ và tập tin Gerber (là một chuẩn vẽ mạch PCB) có thể

được download tại website của aJile :www.ajile.com

Hai môi trường phát triển này đều có những ưu điểm riêng của mình và chúng đều có thể đươc sử dụng miễn phí. Tuy nhiên Eclipse có phần nổi trội hơn vì:

* Khác với NetBean, luôn phát hành dưới dạng Beta, có nghĩa là có thể trở thành bản thương mại bất kỳ lúc nào khi SUN quyết định đưa ra bản chính thức, Eclipse là phiên bản hoàn chỉnh mã nguồn mở. * Các plug-in phục vụ cho việc phát triển Java application rất tốt, hỗ trợ nhiều tính năng cao cấp. IDE hỗ trợ nhiều cách nhìn vào code, sáng sủa và đễ định hướng. * Làm quen với Eclipse đồng nghĩa với cơ hội làm quen với cách làm việc của một trong những môi trường phát triển Web mạnnh nhất hiện nay là Websphere (vì bản chất WebShpere cũng là một plug-in của Eclipse). Những kinh nghiệm có được trên Eclipse hoàn toàn có thể dùng ngay khi chuyển sang WebSphere. * Tìm hiểu Eclipse có thể tạo ra các plug-in phục vụ riêng cho công việc cá nhân và cho cộng đồng phát triển mã nguồn mở.

Một số thủ thuật trong Eclipse

• Hiển thị tiếng Việt:

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 26: Chip AJ200

26

- Window – Preferences - General- Workspace - Text File Encoding - Other -> UTF-8.

• Tự động sổ code:

- Tổ hợp phím kinh điển Ctrl + Space (thao tác rất tiện lợi khi gõ code).

• Comment:

- Ctrl + "/": tự động thêm cụm "//" vào đầu dòng (không tiện lắm).

- Ctrl + Shift + "/": tự động thêm "/* */" vào cụm được bôi đen.

- Ctrl + Shift + "\": tự động bỏ "/* */" vào cụm được bôi đen.

- Ctrl + B : Build All, Ctrl + F11: Run

• Đánh số dòng

- Window - Preferences – General - Text Editors - Tick chọn Show line numbers.

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 27: Chip AJ200

27

Phần III : Quy trình xây dựng một ứng dụng trên Kit aJ-200MEK

Để xây dựng một ứng dụng trên Kit –aJ-200MEK, trước tiên cần phải cài đặt các công cụ phần mềm sau:

1. Eclipse SDK ( có thể tạo file *.class trong của sổ cmd trong Windows) và J2SDK version 1.4 hoặc mới hơn (file j2sdk-1_4_2-windows-i586.exe).

2. Hai trình biên dịch của aJile: ajile_cdc (file ajile_cdc_6.2.05_install.exe) hoặc ajile_cldc (file ajile_cldc_6.2.05_install.exe).

3. Cài đặt USB JTAG Drivers (download tại địa chỉ http://www.ftdichip.com/Drivers/D2XX.htm )

Các bước xây dựng một ứng dụng trên Kit aJile-200MEK

Bước 1: Viết code và biên dịch file *.Java thành bytecode lưu trong file *.class.

Bước 2: Sử dụng các tool của aJile – JemBuilder biên dịch bytecode thành mã máy - file *.sod.

Bước 3: Sử dụng Charade for EVB(m) nạp file *.sod vào Kit để chạy ứng dụng.

Lưu ý: Trong đồ án này, Eclipse sử dụng version 3.6.2 và workspace tại D:\DoAn\code, các tool của aJile được cài đặt tại C:\ajile, J2SDK tại C:\j2sdk.

1. Viết code và biên dịch

1.1 Add thư viện drivers của aJile vào Eclipse.

- Mở Eclipse, trên thanh Menu chính của nó chọn:

Project - Properties - Java Build Path - Add Library… - User Library - Next - User Libraries… - New.

- Tại đây, cửa sổ New Libraries sẽ hiện ra, đặt tên cho cấu hình thiết bị:

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 28: Chip AJ200

28

ajile CDC11(ajile CLDC11) ( lưu ý tick chọn System Library(add to the boot class path) ).

- Sau bước này, ta sẽ thấy thư viện vừa được tạo xuất hiện trong cửa sổ Defined user libraries:. Click chọn thư viện vừa tạo – ajile CDC11 (ajile CLDC11) - Add JARs…. Chọn đường dẫn đến

C:\ajile\Runtime_cdc11 (C:\ajile\Runtime_cldc11)

- Sau đó add các file:

foundation.jar, btclasses.zip, runtime_cdc11.jar (với ajile CLDC11 thì chỉ cần add 2 file: runtime_cldc11, class.jar) - Open.

- Tiếp tục - chọn Add Jars…. Chọn đường dẫn tới:

C:\ajile\Runetime_cdc11\lib\drivers (C:\ajile\Runetime_cldc11\lib\drivers)

- Tại đây chọn tất cả các file *.jar. Sau đó - chọn Open.

Lúc này, cửa sổ Preferences sẽ trông giống như hình dưới đây:

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 29: Chip AJ200

29

Hình 3.1: Add thư viện cho Project

- Chọn Ok để thoát Preferences. Trở lại với cửa sổ Properties, chọn Java Compiler sau đó thiết lập các thông số như hình vẽ:

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 30: Chip AJ200

30

Hình 3.2: Lựa chọn version SDK phù hợp

Như vậy, thư viện các drivers cần thiết của aJile cho một Java Project đã được add xong . Công việc tiếp theo là xây dựng một Java Project.

1.2 Xây dựng một ứng dụngnhỏ - quay video

- Trên Menu chính của Eclipse chọn:

File – New – Project – Java – Java Project – Next

- Cửa sổ New Java Project sẽ hiện ra. Tại Project name điền

MPEGEncodeVCAP – Finish.

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 31: Chip AJ200

31

- Kết thúc bước này sẽ thấy Project vừa tạo bên trái màn hình – trong cửa sổ Package Explorer .

- Chọn src trong Project vừa tạo – MPEGEncodeVCAP. Click chuột phải chọn New Package. Tại cửa sổ New Package – điền name:

com.ajile.examples.vcap.mpegencode

- Chọn Package vừa tạo – click chuột phải – chọn New – Class. Tại mục name gõ: MPEGEncodeVCAp – viết code tại đây. Đây là code trong đồ án này:

package com.ajile.examples.vcap.mpegencode;

import java.io.IOException;

import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

import com.ajile.drivers.display.aj102.LCDException;

import com.ajile.drivers.display.aj102.aJ102LCD;

import com.ajile.drivers.mediacodec.aj200.mpeg.MPEGImage;

import com.ajile.drivers.touch.Touch;

import com.ajile.drivers.touch.TouchCallback;

import com.ajile.drivers.touch.TouchEvent;

import com.ajile.drivers.vcap.VCAPException;

import com.ajile.drivers.vcap.aj200.Sensor;

import com.ajile.drivers.vcap.aj200.aJ200VCAP;

import com.ajile.gfx.Color;

import com.ajile.gfx.Font;

import com.ajile.gfx.FontManager;

import com.ajile.gfx.Graphics;

import com.ajile.gfx.ImageException;

import com.ajile.gfx.RasterOp;

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 32: Chip AJ200

32

import com.ajile.jem.OBJECT;

import com.ajile.jem.rawJEM;

import com.ajile.sysutils.Env;

public class MPEGEncodeVCAP implements TouchCallback

boolean snapShot;

aJ102LCD lcd = aJ102LCD.getInstance();

aJ200VCAP vcap = aJ200VCAP.getInstance();

int lcdWidth, lcdHeight;

int sensorWidth, sensorHeight;

RasterOp vcapRop;

RasterOp lcdRop = Graphics.getRasterOp();

Color color = Graphics.getColor();

Font font = FontManager.getFont(18, Font.BOLD, "Arial", false);

int fontHeight;

String recording = "RECORDING...";

String prompt = "Touch screen and wait few senconds to start a new recording";

int recordingLen, promptLen;

Timer displayTimer;

public MPEGEncodeVCAP() throws VCAPException, LCDException

lcdWidth = lcd.getWidth();

lcdHeight = lcd.getHeight();

int pipWidth = Env.getProperty("pip.width", 640);

int pipHeight = Env.getProperty("pip.height", 480);

int pip1Y = (lcdHeight - pipHeight) >> 1;

int pip1X = (lcdWidth - pipWidth) >> 1;

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 33: Chip AJ200

33

if (pip1Y == 0) pip1X = 0;

Sensor sensor = vcap.getSensor();

sensorWidth = sensor.getWidth();

sensorHeight = sensor.getHeight();

vcapRop = vcap.setOutputFormat(aJ200VCAP.PREVIEW_CHANNEL, aJ200VCAP.OUTPUT_RGB_565, aJ200VCAP.DMA_RGB);

vcap.setSourceActiveWindow(aJ200VCAP.PREVIEW_CHANNEL, 0, 0, sensorWidth, sensorHeight);

vcap.setTargetImageWindow(aJ200VCAP.PREVIEW_CHANNEL, pipWidth, pipHeight, 0, 0, pipWidth, pipHeight);

vcap.enableChannel(aJ200VCAP.PREVIEW_CHANNEL, aJ200VCAP.FULL_FRAME_RATE);

sensor.setSensorMode(aJ200VCAP.VIDEO_PORT_1, Sensor.SENSOR_INTERFACE_CCIR_656, aJ200VCAP.FULL_FRAME_RATE);

sensor.flipImageVertically();

sensor.flipImageHorizontally();

lcd.setFrameBuffer(2, vcapRop.getBaseAddr(), aJ102LCD.FRAMEBUFFER_FORMAT_16_RGB_565);

lcd.setPIPwindow(2, pip1X, pip1Y, pipWidth, pipHeight);

lcd.enablePIPimages(aJ102LCD.PIP_DUAL, 0, 16);

lcd.setEnable(true);

fontHeight = font.getHeight();

promptLen = lcdRop.drawString(color.mapColorRGB(Color.RAW_RGB_BLACK), font, 0, 0, prompt, 0, -1);

recordingLen = lcdRop.drawString(color.mapColorRGB(Color.RAW_RGB_BLACK), font, 0, 0, recording, 0, -1);

displayTimer = new Timer(lcdWidth - 2*fontHeight, lcdHeight - fontHeight);

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 34: Chip AJ200

34

public synchronized void processTouch(TouchEvent event)

snapShot = true;

public void execute()

int frames = Env.getProperty("frames", 300);

int mpegSize = Env.getProperty("mpeg.size", 500000);

ReusableOutputStream videoOutStream = new ReusableOutputStream(mpegSize);

ReusableInputStream videoInStream = new ReusableInputStream(videoOutStream.getBuffer());

while (true)

try

videoOutStream.clearBuffer();

lcdRop.drawString(color.mapColorRGB(Color.RAW_RGB_RED), font,

(lcdWidth - recordingLen), 0, recording, 0, -1);

synchronized (displayTimer)

displayTimer.notify();

System.out.println("\r\nBegin recording...");

long start = rawJEM.getTime();

MPEGImage.encode(1, videoOutStream, frames);

long finish = rawJEM.getTime();

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 35: Chip AJ200

35

displayTimer.interrupt();

System.out.println("Encoding time: " + ((finish - start)/1000) + " ms\r\n");

lcdRop.drawString(color.mapColorRGB(Color.RAW_RGB_BLACK), font,

(lcdWidth - recordingLen), 0, recording, 0, -1);

videoInStream.resize(videoOutStream.size());

RasterOp mpegRop = MPEGImage.getRasterOp();

int pipWidth = MPEGImage.frameWidth;

int pipHeight = MPEGImage.frameHeight;

int x = (lcdWidth - pipWidth) >> 1;

int y = (lcdHeight - pipHeight) >> 1;

if (y == 0) x = 0;

try

lcd.setFrameBuffer(1, mpegRop.getBaseAddr(), aJ102LCD.FRAMEBUFFER_FORMAT_16_RGB_565);

lcd.setPIPwindow(1, x, y, pipWidth, pipHeight);

lcd.enablePIPimages(aJ102LCD.PIP_DUAL, 16, 0);

lcd.setRGBPanelFormat(aJ102LCD.BGR_PANEL_FORMAT);

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 36: Chip AJ200

36

catch (LCDException ex)

rawJEM.breakPoint("LCD exception");

lcdRop.drawString(color.mapColorRGB(Color.RAW_RGB_GREEN), font,

(lcdWidth - promptLen) >> 1, 0, prompt, 0, -1);

while (true)

synchronized (displayTimer)

displayTimer.notify();

start = rawJEM.getTime();

MPEGImage.decode(videoInStream, -1, -1, false);

finish = rawJEM.getTime();

displayTimer.interrupt();

System.out.println("Playback time: " + ((finish - start)/1000) + " ms\r\n");

videoInStream.reset();

if (snapShot)

snapShot = false;

break;

lcdRop.fillFrameBuffer(color.mapColorRGB(Color.RAW_RGB_BLACK));

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 37: Chip AJ200

37

try

lcd.enablePIPimages(aJ102LCD.PIP_DUAL, 0, 16);

lcd.setRGBPanelFormat(aJ102LCD.RGB_PANEL_FORMAT);

catch (LCDException ex)

rawJEM.breakPoint("LCD exception");

catch (IOException ioe)

System.out.println(ioe.getMessage());

rawJEM.breakPoint("File I/O exception");

catch (ImageException ie)

System.out.println(ie.getMessage());

rawJEM.breakPoint("MPEGImage exception");

catch (VCAPException ex)

System.out.println("VCAP Setup failed: " + ex.getMessage());

rawJEM.breakPoint("VCAP Setup failed");

public static void main(String Args[])

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 38: Chip AJ200

38

try

MPEGEncodeVCAP demo = new MPEGEncodeVCAP();

Touch.getInstance().registerCallback(demo);

demo.execute();

catch (VCAPException ex)

System.out.println("VCAP Setup failed: " + ex.getMessage());

catch (LCDException ex)

System.out.println("LCD Setup failed: " + ex.getMessage());

class ReusableInputStream extends ByteArrayInputStream

ReusableInputStream(byte[] buf)

super(buf);

void resize(int newSize)

if (newSize > buf.length)

rawJEM.breakPoint("Video data exceeds input buffer length.");

reset();

count = newSize;

class ReusableOutputStream extends ByteArrayOutputStream

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 39: Chip AJ200

39

ReusableOutputStream(int size)

super(size);

byte[] getBuffer()

return buf;

void clearBuffer()

rawJEM.iblkfil(OBJECT.getArrayElement0(buf), buf.length >> 2, 0);

reset();

class Timer extends Thread

int xOrigin, yPos;

aJ102LCD lcd = aJ102LCD.getInstance();

RasterOp lcdRop = Graphics.getRasterOp();

Color color = Graphics.getColor();

Font font = FontManager.getFont(32, Font.BOLD, "Arial", false);

Timer(int x, int y)

xOrigin = x;

yPos = y;

setPriority(Thread.NORM_PRIORITY + 1);

start();

public void run()

while (true)

synchronized (this)

try wait();

catch (InterruptedException ie)

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 40: Chip AJ200

40

int showTime = 0;

while (true)

try Thread.sleep(100);

catch (InterruptedException ie)

drawTimer(showTime, color.mapColorRGB(Color.RAW_RGB_BLACK));

break;

if (showTime != 0)

drawTimer(showTime, color.mapColorRGB(Color.RAW_RGB_BLACK));

showTime += 100;

drawTimer(showTime, color.mapColorRGB(Color.RAW_RGB_GREEN));

void drawTimer(int value, int fontColor)

int xPos = xOrigin;

int div = 1000;

while (value >= div*10) div *= 10;

do

int digit = value/div;

value -= digit * div;

div /= 10;

xPos = lcdRop.drawChar(fontColor, font, xPos, yPos, (char) ('0'+ digit));

if (div == 100)

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 41: Chip AJ200

41

xPos = lcdRop.drawChar(fontColor, font, xPos, yPos, '.');

while (div >= 100);

- Sau khi code xong, cửa sổ Eclipse sẽ có trông như hình vẽ:

Hình 3.3: Giao diện viết code trên Eclipse

Thực hiện việc viết code và kiểm tra các lỗi có thể gặp phải trong quá trình code. Sau khi đã hết lỗi, trên Menu làm việc của Eclipse, chọn Project – Build All (có thể bỏ qua bước này nếu đã tick Build

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 42: Chip AJ200

42

Automatically). Lúc này, file MPEGEncodeVCAP.class sẽ được tạo ra tại thư mục:

D:\DoAn\Code\MPEGEncodeVCAP\bin\com\ajile\examples\vcap\mpegencode

2. Biên dịch bytecode thành mã máy

- Chạy JemBuilder.exe trong C:\aJile\JemBuilder .

- Trước tiên ta phải thiết lập các Properties cho Project, trên cửa sổ làm việc của JemBuilder chọn Project – Properties. Trong mục Embedded Runtime: chọn Define… Cửa sổ Select Runtime sẽ xuất hiện, chọn New… sau đó thiết lập các thông số như hình vẽ:

Hình 3.4: Thiết lập Embedded Runtime với CDC

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 43: Chip AJ200

43

Hình 3.5: Thiết lập Embedded Runtime với CLDC

- Chọn Ok, để trở lại với cửa sổ Project Properties. Tại Target Configuration chọn aJ200EVBConfiguration – Ok.

- Tiếp theo, tạo một Project mới với JemBuilder. Trên cửa sổ làm việc chính của JemBuilder chọn File - New Project. Một cửa sổ mới sẽ xuât hiện yêu cầu chọn đầu ra cho Project – trong đồ án này là:

D:\DoAn\Jembuilder.

- Chọn Next đến bưỡc tiếp theo. Tại Select a runtime kéo xuống sẽ thấy các Embedded Runtime vừa được thiết lập ở trên. Tại Select a configuration chọn aJ200EVBConfiguration sau đó chọn Finish để chuyển đến cửa sổ tạo JVM.

- Đầu tiên, cần điền tên của JVM mới ( mặc định là JVM0 ). Trong đồ án này tên JVM là: MPEGEncodeVCAP - Next.

- Tiếp theo, tại Enther the fully qualified class name điền tên package đi kèm với tên class giống như dưới đây:

com.ajile.examples.vcap.mpegencode.MPEGEncodeVCAP

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 44: Chip AJ200

44

Bước tiếp theo, chọn đường dẫn đến file các Classpath cần thiết đã được tạo:

D:\DoAn\Code\MPEGEncodeVCAP\bin

D:\DoAn\Code

C:\aJile\Runtime_cdc11\fonts

C:\aJile\Runtime_cdc11\lib\drivers\NAND.jar

- Sau đó, add các Drivers:

Com3

TargetSystem

TouchScreen

LCD_OPTREX_WVGAMedia_codec

SPI_Port

VCAP_OmniVision

- Như hình vẽ:

Hình 3.6: Các Driver cần thiết cho ứng dụng

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 45: Chip AJ200

45

- Lúc này, JVM sẽ xuât hiện ở phía trái cửa sổ làm việc của JemBuilder.

Chọn Properties trong JVM vừa tạo, và gõ đoạn code sau:

gfx.font_A_Bold_12=Arial_Bold_18.bitmap

mcp.bitstream.size.bytes=16384

mcp.mpeg4.config.file=MPEG4Config(VCAP).txt

mcp.sensor.warmup.msec=750

system.out.baudrate=115200

- Sau đó, chọn Resource và Add các resource như hình vẽ:

Hình 3.7: Các Resource cần thiết

- Tiếp theo, chọn Memory – Standard. Chỉnh sửa các thông số tại Immortal Heap Size(bytes): 0x680000

- Trở lại với cửa sổ chính của JemBuilder, chọn Project – Output File sau đó đổi tên file load.sod thành MPEGEncodeVCAP.sod.

- Chọn tiếp Peripheral Clocks và thay đổi các thông số như hình vẽ:

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 46: Chip AJ200

46

Hình 3.8: Thông số các xung clock

- Tiếp theo, chọn I/O Modes

o Synch Serial Interface - Click chọn I2S/AC97 interface

o SD, CF, & VidCap thiết lập như hình vẽ

Hình 3.9: SD, CF, $ VidCap trong ứng dụng

o GPIO A, LCD, & TVout và click chọn như hình vẽ:

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 47: Chip AJ200

47

Hình 3.10: Thông số về GPIO A, LCD, & TVout

- Cuối cùng, chọn Build Output và nhấn F7 để build project – build ra file MPEGEncodeVCAP.sod. Nếu thành công sẽ xuất hiện có thông báo như hình dưới đây:

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 48: Chip AJ200

48

Hình 3.11: Giao diện thông báo quá trình build project

3. Chạy ứng dụng trên Kit

- Trước khi kết nối Kit với máy tính cần cài Driver trên máy tính, giúp máy nhận biết và giao tiếp với Kit. Sau đó, tìm đến C:\aJile\Charade mở Charade.exe. Trên giao diện chính của Charade chọn File – Excute…và chọn đường dẫn tới file *.sod

D:\DoAn\jembuilder

- Chờ vài giây cho Charade đưa dữ liệu vào bộ xử lí chính để điều khiển Kit thực hiện ứng dụng.

- Cuối cùng, Click Go để chạy ứng dụng. Trong quá trình chạy ứng dụng trên Kit các trạng thái hoạt động của ứng dụng sẽ được thông báo trên màn hình Charade như hình dưới đây:

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 49: Chip AJ200

49

Hình 3.12: Giao diện Charade trong quá trình chạy ứng dụng trên Kit aJ-200MEK

4. Kết quả trên Kit aJ-200MEK

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 50: Chip AJ200

50

Hình 3.12: Hình ảnh ứng dụng khi chạy trên Kit aJ-200MEK

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 51: Chip AJ200

51

LỜI CẢM ƠN

Từ những kiến thức đã được học trong quá trình học tập tại trường cùng với sự hỗ

trợ vô cùng quý giá của thầy hướng dẫn – Ts.Nguyễn Ngọc Minh, và anh Nguyên

D06VT1, em đã phân tích và tổng hợp lại thành ĐỒ ÁN TÔT NGHIỆP của mình với

các công việc chính sau:Nghiên cứu, tìm hiêu ngôn ngữ lập trình Java, chip Java cùng

với các tool của aJile. Từ đó, tổng hợp để xây dựng ứng dụng trên bộ Kit aJ-200MEK

Trong suốt quá trình thực thực hiện đồ án, em rất cảm ơn sự hỗ trợ nhiệt tình của

các thầy cô và các bạn, đặc biệt là thầy Nguyễn Ngọc Minh và anh Nguyễn Văn Nguyên

D06VT1 đã tận tình giúp đỡ em thực hiện tốt đồ án tốt nghiệp này.

Em xin chân thành cảm ơn!

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 52: Chip AJ200

52

NHẬN XÉT(Của cơ quan công tác/thực tập - nếu có)

…………………………………………………………………………………………..

…………………………………………………………………………………………..

…………………………………………………………………………………………..

…………………………………………………………………………………………..

…………………………………………………………………………………………..

…………………………………………………………………………………………..

…………………………………………………………………………………………..

…………………………………………………………………………………………..

…………………………………………………………………………………………..

…………………………………………………………………………………………..

…………………………………………………………………………………………..

…………………………………………………………………………………………..

…………………………………………………………………………………………..

…………………………………………………………………………………………..

…………………………………………………………………………………………..

…………………………………………………………………………………………..

…………………………………………………………………………………………..

…………………………………………………………………………………………..

…………………………………………………………………………………………..

…………………………………………………………………………………………..

…………………………………………………………………………………………..

…………………………………………………………………………………………..

…………………………………………………………………………………………..

…………………………………………………………………………………………..

…………………………………………………………………………………………..

…………………………………………………………………………………………..

…………………………………………………………………………………………..

…………………………………………………………………………………………..

…………………………………………………………………………………………..

…………………………………………………………………………………………..

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 53: Chip AJ200

53

…………………………………………………………………………………………..

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 54: Chip AJ200

54

NHẬN XÉT - ĐÁNH GIÁ - CHO ĐIỂM (Của Người hướng dẫn)

…………………………………………………………………………………………..

…………………………………………………………………………………………..

…………………………………………………………………………………………..

…………………………………………………………………………………………..

…………………………………………………………………………………………..

…………………………………………………………………………………………..

…………………………………………………………………………………………..

…………………………………………………………………………………………..

…………………………………………………………………………………………..

…………………………………………………………………………………………..

…………………………………………………………………………………………..

…………………………………………………………………………………………..

…………………………………………………………………………………………..

…………………………………………………………………………………………..

…………………………………………………………………………………………..

…………………………………………………………………………………………..

…………………………………………………………………………………………..

…………………………………………………………………………………………..

…………………………………………………………………………………………..

…………………………………………………………………………………………..

…………………………………………………………………………………………..

…………………………………………………………………………………………..

…………………………………………………………………………………………..

…………………………………………………………………………………………..

Điểm: …………………….………(bằng chữ: …..…………… ….)

Đồng ý/Không đồng ý cho sinh viên bảo vệ trước hội đồng chấm đồ án tốt nghiệp?.

………… - ngày tháng năm 20

CÁN BỘ- GIẢNG VIÊN HƯỚNG DẪN

(ký - họ tên)

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 55: Chip AJ200

55

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 56: Chip AJ200

56

MỤC LỤC MỞ ĐẦU .................................................................................................................. 3

Phần II : Giới thiệu về bộ VXL Java ......................................................................... 11

Dòng chip aJ-200 ....................................................................................................................... 11

Giới thiệu chung ................................................................................................................... 11

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 57: Chip AJ200

57

DANH MỤC CÁC BẢNG - SƠ ĐỒ - HÌNH

BÁNG 1.1 (size 13)...................................................................................................

BẢNG 1.2.................................................................................................................

……..........................................................................................................................

……..........................................................................................................................

……..........................................................................................................................

SƠ ĐỒ 1.1

……..........................................................................................................................

……..........................................................................................................................

……..........................................................................................................................

HÌNH 1.1

…….........................................................................................................................

…….........................................................................................................................

Ghi chú:- Xếp sau trang Mục lục

- Chữ số thứ nhất chỉ tên chương- Chữ số thứ hai chỉ thứ tự bảng biểu - sơ đồ - hình,…trong mỗi chương- Ở cuối mỗi bảng biểu - sơ đồ - hình,…trong mỗi chương phải có ghi chú - giải thích - nêu rõ nguồn trích hoặc sao chụp,…

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 58: Chip AJ200

58

KÍ HIỆU CÁC CỤM TỪ VIẾT TẮT

Cụm từ Cụm từ gốcCDC Connected Device Configuration Cấu hình thiết bị kết nối

CLDC Connected Limited Device Configuration

Cấu hình thiết bị kêt nối giới hạn

PDA Personal Digital Assistant Thiết bị số hỗ trợ cá nhânRISC Reduced Instruction Set ComputerAHB Advanced High-performance BusJVM Java Virtual MachineSOC System On Chip

MIDP Mobile Information Device Profile Mô tả thông tin thiết bị di độngPOSM2M Machine to MachineDSP Digital Signal Processor

CMOSIDEJEMMJM Multimedia Java Virtual MachineSDK Software Development Kit

.

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1

Page 59: Chip AJ200

59

DANH MỤC TÀI LIỆU THAM KHẢO

http://netbeans.orghttp://www.oracle.com/us/index.htmlhttp://thanglong-aptech.com/tag/tu-hoc-lap-trinh-java/http://www.eclipse.org/archived/http://congdongjava.comhttp://javasoft.comhttp://pkhuy.blogspot.com/http://www.ibm.comhttp://tailieuonline.tkhttp://www.google.com.vn/

GVHD: TS. Nguyễn Ngọc Minh SVTH: Phạm Văn Hải, lớp D07-KTDT1