XÂY DỰNG HỆ THỐNG NHÚNG THỜI GIAN THỰC VỚI VI ĐIỀU KHIỂN AT91SAM7S256
Trang 1ĐẠ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
Trang 2Mụ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
Trang 31 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
Trang 4Cấu trúc vi điều khiển dòng SAM7S
Cấu trúc AT91SAM7S Evaluation Board của PNlab
Trang 5Cá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 chophé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
Trang 6- 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
Trang 7hế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 độngcủ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ữamộ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
Trang 8độ 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ốngthờ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
Trang 9Hoạ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
Trang 10Mặ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ươngpháp này
Trang 11Mộ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 đaluồ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ờigian 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ảithiệ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
Trang 12Hoạt động đa nhiệm
2 con trỏ program counter và stack pointer sẽ định hướng hoạt động cho HĐH
Trang 132 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