Xây dựng hệ thống nhúng thời gian thực với vi điều khiển at91sam7s256

Ý tưởng chính của nhóm là sẽ cài đặt hệ điều hành thời gian thực FreeRTOS phiên bản 5.4.2 lên bộ nhớ flash của VĐK AT91SAM7S256 và thực hiện 2 chương trình giao tiếp với PC qua cổng COM và USB. A. Truyền nhận text giữa board và máy tính qua cổng COM ảo B. Mô phỏng một Joystick qua cổng USB

doc24 trang | Chia sẻ: lvcdongnoi | Lượt xem: 2843 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Xây dựng hệ thống nhúng thời gian thực với vi điều khiển at91sam7s256, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ĐẠI HỌC QUỐC GIA TP. HCM TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN Ñ&Ð XÂY DỰNG HỆ THỐNG NHÚNG THỜI GIAN THỰC VỚI VI ĐIỀU KHIỂN AT91SAM7S256 GVHD: Th.S CAO TRẦN BẢO THƯƠNG SVTH: NGUYỄN CÔNG MINH 0520043 HOÀNG TRỌNG HẠNH 0620020 TRƯƠNG THANH HẢI 0620019 TP Hồ Chí Minh – Tháng 06/2010 Mục lục MỤC LỤC 2 1. Giới thiệu chung 3 1.1 Phần cứng 3 1.2 Phần mềm 5 2. Quá trình thực hiện 13 3. Kết luận 23 TAÌ LIỆU THAM KHẢO 24 NHẬN XÉT CỦA GIẢNG VIÊN 25 1. Giới thiệu chung 1.1 Phần cứng Cấu trúc ARM (viết tắt từ tên gốc là Acorn RISC Machine) là một loại cấu trúc vi xử lý 32-bit kiểu RISC được sử dụng rộng rãi trong các thiết kế nhúng. Do có đặc điểm tiết kiệm năng lượng, các bộ CPU ARM chiếm ưu thế trong các sản phẩm điện tử di động, mà với các sản phẩm này việc tiêu tán công suất thấp là một mục tiêu thiết kế quan trọng hàng đầu. Ngày nay, hơn 75% CPU nhúng 32-bit là thuộc họ ARM, điều này khiến ARM trở thành cấu trúc 32-bit được sản xuất nhiều nhất trên thế giới. CPU ARM được tìm thấy khắp nơi trong các sản phẩm thương mại điện tử, từ thiết bị cầm tay (PDA, điện thoại di động, máy đa phương tiện, máy trò chơi cầm tay, và máy tính cầm tay) cho đến các thiết bị ngoại vi máy tính (ổ đĩa cứng, bộ định tuyến để bàn.) Một nhánh nổi tiếng của họ ARM là các vi xử lý Xscale của Intel. Nhóm sử dụng vi điều khiển AT91SAM7S256 - hãng Atmel, tích hợp bên trong là vi xử lý 32-bit ARM7TDMI RISC. Và vi điều khiển này lại được tích hợp vào AT91SAM7S Evaluation Board của PNlab. Thông tin về sản phẩm VĐK AT91SAM7S256 trên trang chủ của Atmel Cấu trúc vi điều khiển dòng SAM7S Cấu trúc AT91SAM7S Evaluation Board của PNlab Các hỗ trợ chính: * Vi xử lý : AT91SAM7S256, 256kByte Flash, 64kByte RAM, USB 2.0, RTT, 10 bit ADC 384 ksps, 2x UARTs, TWI (I2C), SPI, 3x 32bit TIMERS, 4x PWM, SSC, WDT, PDC (DMA) cho tất cả các ngoại vi, tốc độ tối đa 60MHz. * USB 2.0 Full Speed. * 2 Cổng RS232 hỗ trợ giao tiếp UART hoặc DBG. * 1 cổng chuyển đổi USB2COM chuyên dụng hỗ trợ làm việc Laptop. * SD/MMC Socket. * 2 nút bấm đa năng. * 2 LED trạng thái. * Thạch anh 18.432 Mhz onboard. * Kết nối chuẩn JTAG 20 chân. * Hỗ trợ SAM-BA In System Programming (USB hoặc RS232). * Biến trở xoay nối trực tiếp với ADC. * Header mở rộng cho tất cả các cổng vào ra. * Vùng Free Gird cho ứng dụng của người dùng. * Nguồn cấp từ cổng USB hoặc 5-9V DC ngoài. * Mạch 2 lớp chất lượng cao, linh kiện SMD Chức năng của sản phẩm : AT91SAM7S256 là một vi điều khiển hiệu năng cao thuộc dòng ARM7-TDMI 32 bit được phát triển bởi Atmel. AT91SAM7S_EB là một hệ phát triển cho phép các kỹ sư dễ dàng tiếp cận và làm việc một cánh nhanh chóng nhất với dòng ARM. Với một khe cắm thẻ nhớ SD/MMC người dùng hoàn toàn có thể phát triển các ứng dụng lưu trữ hoặc sử dụng số liệu dung lượng cao. Ngoài ra,phần cứng có sẵn cho phép lập trình minh họa hoạt động của các giao tiếp cơ bản như UART, ADC, GPIO, USB 2.0. Đặc biệt Board hỗ trợ chế độ lập trình BOOT ASSISTANT của Atmel, có khả năng nạp chương trình trực tiếp qua cổng USB hoặc RS232 mà không cần đến mạch nạp JTAG. 1.2 Phần mềm Nhóm đã sử dụng và phát triển - Driver giao tiếp USB 2.0 và cổng COM ảo trên Windows - Phần mềm biên dịch IAR Embedded Workbench for ARM version 5.11 - Phần mềm nạp SAMBA version 2.8, hỗ trợ chế độ boot assistant - Phần mềm Terminal giao tiếp giữa board và máy tính qua cổng COM, viết trên môi trường Visual Basic.net - Hệ điều hành thời gian thực FreeRTOS version 5.4.2 - Code giao tiếp với máy tính qua cổng COM và USB 2.0, nạp cho VĐK AT91SAM7S256. Về hệ thống nhúng thời gian thực Mặc dù khái niệm hệ thống nhúng (embedded system) ra đời cách đây thực sự chưa lâu (1971), tuy nhiên sự phát triển và thành công của nó càng ngày càng rõ nét và chưa có giới hạn cuối cùng. - Giới thiệu Ngày nay, một hệ thống nhúng có các ứng dụng rất rộng rãi trong cuộc sống hàng ngày và có thể tìm gặp ở bất kì các thiết bị điện tử nào. Ví dụ trong các thiết bị điện tử dân dụng (máy giặt, tủ lạnh, TV . . .), các thiết bị điện tử “thông minh” (điện thoại di động), thiết bị truyền thông, thiết bị y tế, xe hơi, thậm chí cả trong một máy tính cá nhân (card mở rộng). Một hệ thống nhúng đầu tiên được phát triển bởi Intel vào năm 1971. Đó chính là một con chip vi xử lý 4004 cho các máy tính cầm tay. Một con chip giống nó cũng đã được sử dụng cho tất cả các máy tính cầm tay với nhiều chủng lại khác nhau, chúng chỉ khác nhau ở phần mềm tương ứng với mỗi dòng được nạp trên ROM. Ngày nay, trên thế giới xấp xỉ 98% các loại vi xử lý/vi điều khiển được sử dụng trong một hệ thống nhúng. Và ARM là nhà cung cấp hàng đầu các vi xử lý dựa trên kiến trúc RISC 32 bit (chiếm 75% thị trường) cho các hệ thống nhúng đó. Điểm đặc biệt là ARM chỉ bán IP chứ không bán chip, do đó việc tích hợp các IP vi xử lý 32 bit của ARM vào một chip để xây dựng một SoC trở nên dễ dàng hơn. - Hệ thống nhúng là gì? Trong những năm gần đây, sự phân chia khái niệm một hệ thống thế nào là nhúng và thế nào là không nhúng ngày càng mờ nhạt, không rõ ràng. Lý do rất đơn giàn, vì hầu hết các hệ thống ngày nay đều là hệ thống nhúng. Hệ thống nhúng đã có một số lượng rất lớn các ứng dụng từ nhỏ đến lớn, từ trong dân dụng đến trong công nghiệp, từ điều khiển đơn giản đến xử lý phức tạp. . . Trong khuôn khổ bài viết này, một hệ thống nhúng có thể định nghĩa như sau : là một hệ thống chuyên dụng cho một mục đích xác định, bao gồm nhiều thành phần (bộ nhớ, I/O, module chức năng . . .) xung quanh một vi xử lý cùng với một hệ điều hành nhỏ, gọn, nhanh nhằm mục đích điều khiển vi xử lý, tất cả nằm trên một con chip (SoC) hay một board mạch. Điểm quan trọng cần lưu ý là sự khác biệt giữa một hệ thống nhúng và hệ thống máy tính PC : một hệ thống nhúng chính là một hệ thống chuyên dụng với một chức năng cụ thể, trong khi đó hệ thống máy tính PC là một hệ thống đa dụng với chức năng của nó tại một thời điểm do phần mềm quyết định. Trong một hệ thống nhúng có thể có nhiều chương trình phần mềm chạy cùng lúc với nhau dưới một hệ điều hành nào đó. Bởi vì một hệ thống nhúng còn có thể là một phần nhỏ của một hệ thống lớn hơn, nên nó có thể nằm trên một board mạch với một vi xử lý riêng cùng với phần mềm được lưu trữ trong ROM. Vì là một hệ thống chuyên dụng, nên hầu hết các hệ thống nhúng phải đáp ứng sự thay đổi ở các tín hiệu ngõ vào (input) trong thời gian ngắn nhất có thể, tức là phải đảm bảo tốc độ hoạt động của nó. Vì vậy, các hệ thống nhúng đều có tốc độ hoạt động rất cao là được xếp vào loại thời gian thực (real time). Với các ứng dụng đơn giản, nó chỉ cần một chương trình nhỏ (mà không cần hệ điều hành) để điều khiển hệ thống, tuy nhiên, một hệ điều hành cài đặt trên hệ thống nhúng để chạy các chương trình ứng dụng sẽ giúp cho hệ thống trở nên cực kỳ linh hoạt. - Đặc trưng của hệ thống nhúng Một đặc trưng quan trọng của hệ thống nhúng đó chính là “tính quyết định”. Đặc trưng này có nghĩa là tất cả các trạng thái bên trong của hệ thống, các giá trị ngõ vào liên quan đến ngõ ra đều có thể tính toán trước được (về mặt nguyên tắc). Tất nhiên “tính quyết định” không chỉ là một đặc trưng riêng cho một hệ thống nhúng mà nó có thể là một hệ thống bất kỳ, tuy vậy, một đặc tính khác cũng khá quan trọng và mang nét riêng của hệ thống nhúng đó chính là thời gian thực. Một hệ thống nhúng phải có khả năng thực hiện chức năng của mình trong một khoảng thời gian hữu hạn, ít nhất và có thể biết trước. Một hệ thống nhúng bao giờ cũng được “bao bọc” bởi một hệ thống phần cứng mà nó điều khiển, chính vì vậy, đối với người sử dụng cuối, họ không nhận ra sự hiện diện của hệ thống nhúng trong một thiết bị phần cứng. Do đó, đây cũng là sự khác biệt giữa một hệ thống nhúng và một máy tính cá nhân. Một hệ thống nhúng cũng có khả năng tương tác với thế giới bên ngoài, tuy nhiên giao diện người sử dụng của nó lại thường khá đơn giản. Lĩnh vực hệ thống nhúng đòi hỏi sự kết hợp của nhiều ngành lại với nhau như : kỹ thuật phần mềm, hệ điều hành, thiết kế phần cứng (chip) . . . Vì vậy, một kỹ sư thiết kế hệ thống nhúng phải có khả năng hiểu được nhiều lĩnh vực khác nhau, từ thiết kế phần cứng, xuống layout ra chip, đến lập trình phần mềm, cài đặt hệ điều hành . . . - Hệ thống thời gian thực Như đã đề cập ở trên, một hệ thống có khả năng thực hiện thời gian thực nghĩa là hệ thống đó phải thực hiện các chức năng của mình trong một khoảng thời gian xác định và nhỏ nhất có thể chấp nhận được. Khi đáp ứng được yêu cầu này, hệ thống đó có thể gọi là hệ thống thời gian thực Các hệ thống này phải có khả năng đáp ứng các tín hiệu ngõ vào hoặc các sự kiện trong giới hạn một khoảng thời gian bắt buộc. Cho nên các hệ thống này không chỉ phải trả về một kết quả đúng mà còn phải nhanh nhất đáp ứng được yêu cầu về tốc độ của hệ thống. Trong các hệ thống thời gian thực, tốc độ cũng quan trọng không kém gì độ chính xác của nó. Có 2 loại thời gian thực : thời gian thực cứng và thời gian thực mềm. Đối với hệ thống thời gian thực cứng, tất cả các chức năng của nó phải được thực thi chính xác trong một khoảng thời gian xác định, nếu không cả hệ thống sẽ bị lỗi nghiêm trọng. Ví dụ : hệ thống điều khiển không lưu, hệ thống dẫn đường tên lửa, thiết bị y tế . . . Đối với hệ thống thời gian thực mềm, các chức năng phải được thực hiện trong một khoảng thời gian xác định nhỏ nhất nhưng không bắt buộc. - Hệ điều hành thời gian thực (RTOS) và kernel thời gian thực Một số các ứng dụng nhúng có thể thực hiện hiệu quả mà chỉ cần một chương trình đơn giản chạy độc lập điều khiển cả hệ thống. Tuy nhiên, đối với đa số các ứng dụng mang tính thương mại, một hệ nhúng cần phải có hệ điều hành thời gian thực hoặc kernel thời gian thực. Một kernel thời gian thực thường nhỏ hơn rất nhiều so với một RTOS hoàn chỉnh. Trong lý thuyết về hệ điều hành, kernel chính là một phần của hệ điều hành, nó sẽ được nạp lên bộ nhớ đầu tiên và vẫn tồn tại trong lúc chương trình hoạt động. Một kernel thời gian thực sẽ cung cấp hầu hết các dịch vụ cần thiết cho các ứng dụng nhúng.Do đó chỉ là một phần của hệ điều hành và được nạp thẳng lên bộ nhớ, nên một kernel thời gian thực thường có kích thước rất nhỏ, rất phù hợp cho các bộ nhớ có dung lượng thấp trong các hệ thống nhúng. Hình dưới mô tả một kernel trong một RTOS hoàn chỉnh. Hoạt động của hệ thống nhúng đươc thực hiện theo chương trình, gồm các tác vụ (task) hoặc luồng (thread) trong việc đáp ứng các tín hiệu ngõ vào hay trong quá trình xử lý bình thường theo yêu cầu của hệ thống. Các quá trình xử lý phải trả về kết quả đúng trong một khoảng thời gian xác định. - Chương trình, tác vụ và luồng Một chương trình trên một hệ thống nhúng chính là một phần mềm có khả năng thực thi độc lập và có vùng nhớ riêng của mình. Nó bao gồm môi trường thực thi một chức năng cụ thể và khả năng tương tác với hệ điều hành. Một chương trình có thể được bắt đầu chạy một cách độc lập hoặc có thể từ các chương trình khác. Một hệ điều hành có khả năng thực thi nhiều chương trình cùng một lúc song song nhau. Tuy nhiên, khi một chương trình có khả năng tự chia ra một vài phần có khả năng thực thi song song nhau, mỗi phần đó được gọi là một luồng. Một luồng chính là một phần trong chương trình và phụ thuộc về mặt chức năng so với các luồng khác nhưng lại có khả năng hoạt động độc lập nhau. Các luồng sẽ chia sẻ chung một bộ nhớ trong một chương trình. Khái niệm về tác vụ và luồng có thể thay thế cho nhau. Hình dưới mô tả sự khác nhau giữa chương trình và luồng. - Kiến trúc của hệ thống thời gian thực Kiến trúc của một hệ thống thời gian thực sẽ quyết định các luồng được thực thi khi nào và bằng cách nào. Có 2 kiến trúc phổ biến là kiến trúc điều khiển vòng lặp với polling và mô hình sắp xếp ưu tiên. Trong kiến trúc điều khiển vòng lặp với polling, kernel sẽ thực thi một vòng lặp vô hạn, vòng lặp này sẽ chọn ra luồng trong một mẫu được định trước. Nếu một luồng cần dịch vụ, nó sẽ được xử lý. Có một vài biến thể của phương pháp này, tuy nhiên vẫn phải đảm bảo mỗi luồng đều có khả năng truy cập đến vi xử lý. Hình dưới mô tả cách xử lý của phương pháp này. Mặc dù phương pháp điều khiển vòng lặp với polling rất dễ thực hiện, tuy nhiên nó vẫn có những hạn chế nghiêm trọng. Thứ nhất đó chính là nó sẽ mất rất nhiều thời gian, khi mà một luồng cần truy cập đến vi xử lý sẽ phải chờ đến lượt của mình, và một chương trình có quá nhiều luồng sẽ bị chậm đi rất nhiều. Thứ hai, phương pháp này không có sự phân biệt giữa các luồng, luồng nào quan trọng và luồng nào ít quan trọng, từ đó xác định mức độ ưu tiên giữa các luồng. Một phương pháp khác mà các kernel thời gian thực hay sử dụng đó chính là mô hình sắp xếp mức độ ưu tiên. Trong mô hình này, mỗi luồng sẽ đi kèm với mức độ ưu tiên của nó, lúc này, vi xử lý sẽ thiết lập đường truy cập tới luồng nào có mức độ ưu tiên cao nhất khi nó đòi hỏi được phục vụ. Cũng có một vài biến thể của phương pháp này, tuy nhiên vẫn phải đảm bảo các luồng có mức độ ưu tiên thấp nhất vẫn phải có thể truy cập tới vi xử lý một vài lần. Hình dưới mô tả phương pháp cách xử lý của phương pháp này. Một ưu điểm cực kỳ quan trọng của phương pháp này đó chính là nó có khả năng tạm hoãn thực thi một luồng khi có một luồng khác với mức độ ưu tiên cao hơn cần phục vụ. Quá trình lưu trữ lại các thông tin hiện thời của luồng bị tạm hoãn thực thi khi có một luồng khác với mức độ ưu tiên cao hơn cần phục vụ gọi là “context switching”. Quá trình này phải được thực hiện nhanh và đơn giản để luồng bị tạm hoãn có thể thực hiện tiếp nhiệm vụ của mình một cách chính xác khi nó lấy lại đươc quyền điều khiển. Một hệ thống nhúng thời gian thực phải có khả năng đáp ứng lại các tín hiệu ngõ vào hay các sự kiện một cách nhanh nhất và chính xác nhất, đây chính là các ngắt của hệ thống. Ngắt của hệ thống sẽ phải làm cho vi xử lý ngưng nhiệm vụ đang thực thi để xử lý ngắt. Một ngắt sẽ được xử lý bởi ISR (interrupt service routine), nó có khả năng kích hoạt một luồng có mức độ ưu tiên cao hơn luồng đang được thực thi. Lúc này, nó sẽ tạm hoãn lại luồng hiện tại để dành quyền cho luồng mới có mức độ ưu tiên cao hơn. Ngắt có thể được tạo ra bởi phần mềm (ngắt mềm) hay bởi các thiết bị phần cứng (ngắt cứng). - Sự phát triển của hệ thống nhúng Các ứng dụng nhúng ngày nay rất rộng rãi và sẽ được phát triển ngày càng cao ở cả phần cứng lẫn phần mềm. Các ứng dụng nhúng đều cần phải có thời gian thực, đây là một sự khác biệt rất lớn giữa một hệ thống nhúng và một hệ thống máy tính truyền thống. Ngày nay để tăng tốc độ của một hệ thống nhúng, nó phải có khả năng thực hiện xử lý song song giữa các luồng với nhau. Do vậy, cách viết các chương trình phần mềm truyền thống sẽ không còn phù hợp khi lập trình cho các hệ thống nhúng đa luồng nữa. Hơn nữa, một vi xử lý trong hệ thống nhúng đòi hỏi tốc độ cao sẽ không còn làm nhiệm vụ xử lý, mà chỉ còn làm nhiệm vụ điều khiển và giám sát hoạt động của hệ thống. Chức năng xử lý luồng dữ liệu sẽ được các module phần cứng trong hệ thống đảm nhận và được thực hiện song song nhau. Kiến trúc một hệ thống nhúng thời gian thực đã có sự khác biệt rất nhiều và những cải tiến đáng kể so với kiến trúc hệ thống máy tính truyền thống trước kia. Điều này nhằm đảm bảo về sự chính xác và cải thiện tốc độ của hệ thống. Hầu hết các hệ thống nhúng ngày nay dùng ngôn ngữ C để lập trình, tuy nhiên một số rất ít vẫn dùng hợp ngữ. Nguyên tắc hoạt động của HĐH FreeRTOS Hoạt động đa nhiệm 2 con trỏ program counter và stack pointer sẽ định hướng hoạt động cho HĐH 2. Quá trình thực hiện Ý tưởng chính của nhóm là sẽ cài đặt hệ điều hành thời gian thực FreeRTOS phiên bản 5.4.2 lên bộ nhớ flash của VĐK AT91SAM7S256 và thực hiện 2 chương trình giao tiếp với PC qua cổng COM và USB. A. Truyền nhận text giữa board và máy tính qua cổng COM ảo B. Mô phỏng một Joystick qua cổng USB - Cài đặt phần mềm nạp Samba 2.7, nằm trong bộ AT91-ISP (In System Programmer) 1.12 của Atmel, đây là chương trình cài đặt của hãng Atmel. - Cài đặt driver giao tiếp với máy tính qua cổng USB và COM ảo Cài đặt driver giao tiếp USB thành công, máy đã nhận board. Cài đặt driver COM ảo thành công, máy đã nhận board. - Cài đặt trình biên dịch IAR Embedded Workbench for ARM version 5.11: chương trình này dùng để viết và biên dịch chương trình cho VĐK AT91SAM7S256. - Tải bộ cài HĐH FreeRTOS 5.4.2 - Tiến hành chỉnh sửa và biên dịch mã nguồn FreeRTOS, viết ứng dụng giao tiếp với máy tính trên môi trường IAR Giao diện chương trình IAR. Chọn xuất ra file .bin khi dịch xong Bắt đầu biên dịch chương trình, chuột phải vào tên project ở menu bên trái, chọn “Rebuild All”. Đã biên dịch thành công chương trình, IAR xuất ra file .bin, dùng để nạp vào VĐK trên board. - Sau đó tiến hành viết chương trình Terminal giao tiếp giữa board và máy tính qua cổng COM ảo, trên môi trường Microsoft Visual Basic.net 2008 Giao diện Microsoft Visual Basic.net 2008 - Dùng Samba nạp HĐH FreeRTOS và ứng dụng của nó (dạng file .hex) vào bộ nhớ flash của VĐK AT91SAM7S256 Chạy chương trình nạp SAMBA, chọn cổng kết nối là USB, tên VĐK là AT91SAM7S256 Chọn file .bin đã được dịch thành công ở trên và tiến hành nạp chương trình. A. Truyền nhận text giữa board và máy tính qua cổng COM ảo Khởi chạy chương trình giao tiếp qua cổng COM và thiết lập chế độ hoạt động thích hợp Giao tiếp qua cổng COM ảo, truyền và nhận text giữa board với máy tính B. Mô phỏng một Joystick qua cổng USB Ta mô phỏng một joystick, khi kết nối, PC nhận dạng board như một thiết bị USB mới được cắm vào Kết nối thành công, board đã được cấu hình thành 1 joystick USB Ta tiếp tục kiểm tra chế độ điều khiển của joystick Ta sử dụng 2 nút nhấn PA20 và PA19 trên board để điều khiển hướng đi của joystick, nút phải (switch 2) đi xuống và nút trái (switch 1) đi lên. 3. Kết luận Đề tài của nhóm chỉ dừng ở mức độ nghiên cứu một cách tổng quan và cơ bản về cấu tạo và những ứng dụng của dòng vi xử lý ARM nói riêng, và các thao tác chính trong quy trình xây dựng và phát triển một ứng dụng nhúng nói chung. Tài liệu tham khảo 1. Bách khoa mở wikipedia.org - ấu_trúc_ARM 2. How FreeRTOS works - 3. Hệ thống nhúng thời gian thực là gì - BIMOS Việt Nam Nhận xét của giảng viên

Các file đính kèm theo tài liệu này:

  • docXây dựng hệ thống nhúng thời gian thực với vi điều khiển at91sam7s256.doc