Tải bản đầy đủ (.doc) (57 trang)

lập trình vi xử lý arm

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (3.48 MB, 57 trang )

MỤC LỤC
DANH MỤC HÌNH VẼ....................................................................................................3
LỜI MỞ ĐẦU...................................................................................................................5
CHƯƠNG 1: TỔNG QUAN VỀ HỆ THỐNG NHÚNG VÀ QUY TRÌNH PHÁT
TRIỂN HỆ THỐNG NHÚNG..........................................................................................7
1.1. Tổng quan về hệ thống nhúng.....................................................................................7
1.1.1. Một số khái niệm......................................................................................................7
1.1.2. Một số ứng dụng......................................................................................................8
1.2. Quy trình phát triển hệ thống nhúng...........................................................................8
1.2.1. Các mô hình phát triển hệ nhúng.............................................................................8
1.2.2. Các giai đoạn phát triển hệ thống nhúng...............................................................12
1.2.2.1. Xác định yêu cầu sản phẩm................................................................................12
1.2.2.2. Lựa chọn chip......................................................................................................13
1.2.2.3 Phân chia giữa phần cứng và phần mềm.............................................................14
1.2.2.4 Giai đoạn phát triển..............................................................................................15
1.2.2.5 Tích hợp phần cứng phần mềm...........................................................................15
1.2.2.6 Kiểm thử mức hệ thống nhúng............................................................................17
CHƯƠNG 2: KIẾN TRÚC ARM VÀ VI ĐIỀU KHIỂN LÕI ARM...........................18
2.1. Tổng quan về vi xử lý ARM và vi điều khiển lõi ARM..........................................18
2.2. Kiến trúc ARM Cortex M3.......................................................................................20
2.2.1. Giới thiệu ARM Cortex-M3..................................................................................20
2.2.2. Kiến trúc ARM cortex M3.....................................................................................21
2.2.3. Mô hình giao tiếp ARM.........................................................................................23
2.2.4. Một số giao tiếp ARM...........................................................................................24
2.2.5. Tập thanh ghi..........................................................................................................26
2.3. Vi điều khiển STM32................................................................................................29
CHƯƠNG 3: LẬP TRÌNH MÔ PHỎNG HỆ THỐNG NHÚNG................................31
3.1. Thiết kế mạch với Proteus........................................................................................31
3.1.1. Lấy linh kiện..........................................................................................................31
3.1.2. Thiết kế mạch.........................................................................................................32
3.2. Lập trình nhúng trên Keil C......................................................................................34


3.2.1. Môi trường phát triển.............................................................................................34
3.2.2. Lập trình ứng dụng trên Keil C..............................................................................38
3.2.2.1. Nguồn Clock trong STM32................................................................................38
3.2.2.2. Tạo thư viện Delay sử dụng SYSTICK trong STM32.......................................39
3.2.2.3. Lập trình GPIO điều khiển led đơn....................................................................41
1


3.2.2.4. Lập trình hiển thị LCD........................................................................................43
3.2.2.5. Lập trình điều khiển USART..............................................................................45
3.2.3. Nạp code cho vi điều khiển....................................................................................46
CHƯƠNG 4: THỰC NGHIỆM.....................................................................................49
4.1. Thực nghiệm 1 – Hiển thị LCD................................................................................49
4.2. Thực nghiệm 2 – Giao tiếp nút nhấn điều khiển led................................................51
4.3. Thực nghiệm 3 – Giao tiếp UART, LCD.................................................................53
KẾT LUẬN...................................................................................................................... 55
TÀI LIỆU THAM KHẢO..............................................................................................57

2


DANH MỤC HÌNH VẼ
Hình 1.1: Quan hệ giữa hệ nhúng và thời gian thực......................................................8
Hình 1.2: Quy trình phát triển hệ thống nhúng theo phương pháp truyền thống.......9
Hình 1.3: Quy trình phát triển hệ thống nhúng theo phương pháp đồng thiết kế.....10
Hình 1.4: Quy trình thiết kế và xây dựng phần cứng...................................................11
Hình 1.5: Các mức trừu tượng của platform phần cứng.............................................12
Hình 1.6: Mô tả platform phần mềm.............................................................................12
Hình 1.7: Minh họa vấn đề big endian/little endian.....................................................16
Hình 2.1. Quá trình phát triển và các dòng vi xử lý dựa trên ARM7.........................19

Hình 2.2. Các thành phần chính của ARM Cortex – M3.............................................22
Hình 2.3. Mô hình giao tiếp ARM..................................................................................23
Hình 2.4. Bản đồ bộ nhớ.................................................................................................24
Hình 2.5. Bộ điều khiển ngắt FIQ và IRQ.....................................................................25
Hình 2.6. Kiến trúc load và store của vi xử lý ARM Cortex-M3.................................26
Hình 2.7. Tập thanh ghi của vi xử lý ARM Cortex-M3...............................................27
Hình 2.8. Thanh ghi trạng thái chương trình của vi xử lý Cortex-M3.......................27
Hình 2.9. Kiến trúc của STM32 nhánh Performance và Access..................................30
Hình 3.1. Công cụ thiết kế mạch nguyên lý – Proteus..................................................31
Hình 3.2. Lấy linh kiện...................................................................................................32
Hình 3.3. Khung tìm kiếm, lựa chọn thiết bị.................................................................32
Hình 3.4. Môi trường thiết kế mạch nguyên lý.............................................................33
Hình 3.5. Sơ đồ nguyên lý mạch điều khiển đèn led.....................................................34
Hình 3.6. Lựa chọn vi xử lý............................................................................................35
Hình 3.7. Thiết lập cấu trúc project..............................................................................36
Hình 3.8. Cấu trúc file và package trong project ARM...............................................37
Hình 3.9. Thiết lập đường dấn thư viện........................................................................38
Hình 3.10a. Thiết lập cấu hình debug............................................................................47
Hình 3.10b. Thiết lập cấu hình thiết bị..........................................................................48
3


Hình 3.10c. Load mã hexa..............................................................................................48
Hình 4.1a. Sơ đồ mạch....................................................................................................50
Hình 4.1b. Định nghĩa lại các chân LCD kết nối ARM................................................50
Hình 4.1c. Hiển thị dữ liệu lên LCD..............................................................................51
Hình 4.2. Sơ đồ mạch đèn led và nút bấm.....................................................................51
Hình 4.2a. Định nghĩa các chân vào ra GPIO...............................................................52
Hình 4.2a. Chương trình giao tiếp nút nhấn điều khiển led........................................53
Hình 4.2b. Mạch thực nghiệm........................................................................................53

Hình 4.3. Mô phỏng truyền nhận uart...........................................................................54

4


LỜI MỞ ĐẦU
Hệ thống nhúng hiện nay đang phát triển mạnh mẽ trong lĩnh vực điện tử và công
nghệ thông tin, với những ứng dụng rộng rãi trong công nghiệp và đời sống. Điều này đòi
hỏi các hệ thống nhúng phải có cấu trúc mạnh mẽ, đáp ứng thời gian thực, bộ nhớ lớn,
tiêu thụ ít năng lượng, ổn định và tích hợp nhiều thiết bị ngoại vi.
Vi điều khiển ARM được đánh giá là một trong những dòng vi điều khiển mạnh, đáp
ứng được những yêu cầu trong hệ thống nhúng ngày nay, được sử dụng rộng rãi ở trên thế
giới và đang được nghiên cứu phát triển ở Việt Nam. Trong đề tài này, chúng tôi tập trung
nghiên cứu mô hình, kiến trúc ARM Cortex M3, quy trình phát triển hệ thống nhúng. Các
công cụ, môi trường thiết kế, mô phỏng mạch cũng như môi trường phát triển phần mềm
nhúng được sử dụng để xây dựng các chương trình mô phỏng.
Đề tài “Nghiên cứu thử nghiệm kỹ thuật xây dựng hệ thống nhúng dựa trên vi điều
khiển lõi ARM” là bước đầu tiếp cận của nhóm. Qua đây chúng tôi đã tìm hiểu được
nhiều kiến thức quý báu về vi điều khiển ARM, lập trình nhúng trên ARM và đồng thời
cũng là điều kiện rất tốt để chúng tôi chuẩn bị những kiến thức, tài liệu quan trọng phục
vụ cho đào tạo đầu ra chuyên ngành “Kỹ thuật phần mềm nhúng và di động”.
Trong báo cáo này, chúng tôi trình bày những nội dung đã nghiên cứu và các kết quả
đạt được của nhóm đề tài trong 04 chương:
Chương 1: Tổng quan về hệ thống nhúng và quy trình phát triển hệ thống
nhúng. Trong chương này, chúng tôi trình bày các khái niệm cơ bản, các ứng dụng của hệ
thống nhúng và đặc biệt là đề xuất quy trình phát triển hệ thống nhúng.
Chương 2: Kiến trúc ARM. Chương này chỉ ra kiến trúc của ARM nói chung cũng
như kiến trúc, các thành phần của ARM Cortex M3. Bên cạnh đó, các đặc điểm của tập
các thanh ghi cũng được giới thiệu chi tiết.
Chương 3: Lập trình mô phỏng hệ thống nhúng. Chương này giới thiệu công cụ

thiết kế, mô phỏng mạch trên Proteus, các thao tác cơ bản, các thành phần cơ bản được
chỉ rõ. Đồng thời việc lập trình phần mềm trên môi trường Keil C, các kỹ thuật xuất dữ
liệu ra LCD, điều khiển nút nhấn hay truyền dữ liệu USART được trình bày chi tiết.
Chương 4: Thực nghiệm. Trong phần thực nghiệm, chúng tôi đã tiến hành cài đặt 3
chương trình thực nghiệm là mô phỏng hiển thị dữ liệu LCD, điều khiển nút bấm hiển thị
đèn led và truyền dữ liệu USART. Trong đó chương trình giao tiếp nút nhấn để điều
khiển hiển thị trên led được cài đặt và nạp trực tiếp lên một mạch thật trên chip
STM32F103R, 2 chương trình còn lại được nạp vào mạch mô phỏng được thiết kế trên
proteus.
5


Trong quá trình thực hiện đề tài, nhóm chúng tôi đã cố gắng và làm việc nghiêm túc,
khoa học. Tuy nhiên, do hạn chế về thời gian cũng như kiến thức về vấn đề này cùng với
sự phát triển mạnh mẽ của công nghệ nên không tránh khỏi những thiếu sót, hạn chế.
Chúng tôi rất mong nhận được sự đóng góp của các nhà khoa học, các cấp quản lý cùng
đồng nghiệp để chỉnh sửa bổ sung và hoàn thiện hơn nữa.
Chúng tôi xin chân thành cảm ơn Ban giám đốc, phòng Sau Đại Học, khoa Công
nghệ thông tin, các phòng chức năng thuộc Học viện Kỹ thuật Mật mã và các bạn đồng
nghiệp đã tạo điều kiện thuận lợi cho việc nghiên cứu và hoàn thiện đề tài này.

Hà Nội, tháng 12/2015

6


CHƯƠNG 1: TỔNG QUAN VỀ HỆ THỐNG NHÚNG VÀ QUY
TRÌNH PHÁT TRIỂN HỆ THỐNG NHÚNG
Phần này sẽ trình bày tổng quan về các vấn đề trong phát triển hệ thống nhúng. Đầu
tiên, chúng tôi trình bày về các khái niệm hệ thống nhúng, phần mềm nhúng và hệ thống

nhúng thời gian thực. Sau đó, chúng tôi sẽ tóm lược các phạm vi ứng dụng và các loại hệ
thống nhúng điển hình. Cuối cùng, chúng tôi trình bày về các giai đoạn trong quy trình
phát triển hệ thống nhúng.

1.1. Tổng quan về hệ thống nhúng
1.1.1. Một số khái niệm
i. Hệ thống nhúng
Hệ thống nhúng là một hệ thống tính toán gồm phần cứng và phần mềm được gắn
theo một hệ thống khác để điều khiển hoạt động và xử lý thông tin của hệ thống đó.
ii. Hệ thống nhúng thời gian thực
Hệ thống thời gian thực là hệ thống mà tính đúng đắn của toàn bộ hệ thống phụ
thuộc cả vào tính đúng đắn về chức năng và tính đúng đắn về thời gian. Tính đúng đắn về
thời gian được hiểu là yêu cầu của hệ thống phải đảm bảo thoả mãn về tính tiền định
trong hoạt động của hệ thống. Tính tiền định nói lên hành vi của hệ thống thực hiện đúng
trong một khung thời gian cho trước hoàn toàn xác định. Hệ thống thời gian thực được
phân làm hai loại đối với khái niệm thời gian thực là cứng (hard real-time) và mềm (soft
real-time).
- Thời gian thực cứng là khi hệ thống hoạt động với yêu cầu thoả mãn sự ràng buộc
trong khung thời gian cứng tức là nếu vi phạm thì sẽ dẫn đến hoạt động của toàn hệ thống
bị sai hoặc bị phá huỷ.
- Thời gian thực mềm là khi hệ thống hoạt động với yêu cầu thoả mãn ràng buộc
trong khung thời gian mềm, nếu vi phạm và sai lệch nằm trong khoảng cho phép thì hệ
thống vẫn có thể hoạt động được và chấp nhận được.
Thực tế thấy rằng hầu hết hệ thống nhúng là các hệ thời gian thực và hầu hết các hệ
thời gian thực là hệ nhúng. Điều này phản ánh mối quan hệ mật thiết giữa hệ nhúng và hệ
thời gian thực, tính thời gian thực đã trở thành như một thuộc tính tiêu biểu của hệ thống
nhúng. Quan hệ giữa hệ thống nhúng và hệ thống nhúng thời gian thực được chỉ ra trong
Hình 1.1.
7



Hệ nhúng Hệ nhúng thời
gian thực

Hệ thời
gian
thực

Hình 1.1: Quan hệ giữa hệ nhúng và thời gian thực
iii. Phần mềm nhúng
Phần mềm nhúng là phần mềm tích hợp trong các hệ thống nhúng. Mục đích của
phần mềm nhúng nhằm điều khiển phần cứng, cho phép đáp ứng tương tác người dùng
hoặc cung cấp môi trường để phát triển các phần mềm nhúng tích hợp khác.

1.1.2. Một số ứng dụng
Hiện nay, các ứng dụng của hệ thống nhúng đang được sử dụng rộng rãi và xu thế sẽ
còn tăng mạnh. Một số lĩnh vực, sản phẩm ứng dụng hệ thống nhúng:
• Các thiết bị điều khiển, đo lường
• Ô tô, tàu điện
• Truyền thông
• Thiết bị y tế
• Các thiết bị thông minh: smart home, smart phone, ..
• Các thiết bị điện tử tiêu dùng
• Robots

1.2. Quy trình phát triển hệ thống nhúng
1.2.1. Các mô hình phát triển hệ nhúng
Do đặc thù riêng nên quy trình phát triển hệ thống nhúng có một số điểm khác biệt so
với vòng đời phần mềm. Tùy thuộc vào phương pháp tiếp cận trong phát triển hệ thống
nhúng mà quy trình phát triển khác nhau. Có ba phương pháp phổ biến trong phát triển hệ

thống nhúng là: phương pháp truyền thống, phương pháp đồng thiết kế và phương pháp
dựa trên platform.
i. Phương pháp truyền thống
Quy trình phát triển hệ thống nhúng theo phương pháp truyền thống mô tả như trong
Hình 1.2 sau:

8


Hình 1.2: Quy trình phát triển hệ thống nhúng theo phương pháp truyền thống
Quy trình phát triển hệ thống nhúng theo phương pháp truyền thống được minh họa
trong Hình 1.2. Căn cứ vào đặc tả yêu cầu, mỗi tác vụ hệ thống có thể được phân thành
tác vụ phần cứng hoặc tác vụ phần mềm. Các tác vụ phần cứng được thực hiện theo các
mạch tích hợp có sẵn hoặc xây dựng mới còn các tác vụ phần mềm được thực hiện bởi
CPU. Phát triển phần cứng là giai đoạn tiếp theo sau khi phân chia phần cứng – phần
mềm. Giai đoạn phát triển phần mềm được thực hiện sau khi đã phát triển phần cứng.
Tiếp đến là giai đoạn tích hợp phần mềm lên hệ thống phần cứng, kiểm thử hệ thống, làm
bản mẫu và sản xuất. Phương pháp truyền thống có hai hạn chế chính là thời gian phát
triển lâu và không linh động do phần mềm được phát triển cho phần cứng cố định và
không thể thay đổi việc phân chia phần cứng – phần mềm.
ii. Phương pháp đồng thiết kế
Phương pháp phát triển hệ thống nhúng truyền thống có thời gian phát triển lâu và
tách biệt giữa phát triển phần cứng, phần mềm thành các giai đoạn khác nhau do đó sự
phù hợp giữa phần cứng, phần mềm bị hạn chế. Đồng thời việc đánh giá, cải tiến sự phân
chia phần cứng – phần mềm trong phương pháp truyền thống cũng gặp khó khăn. Để khắc
phục vấn đề này, phương pháp đồng thiết kế phần cứng – phần mềm đã được đề xuất,
triển khai. Quy trình phát triển theo hướng tiếp cận đồng thiết kế được chỉ ra như trong
Hình 1.3. Theo phương pháp này, giai đoạn thiết kế hệ thống nhúng bắt đầu từ đặc tả một
phân chia phần cứng – phần mềm; sau đó tiến hành song song mô hình phần cứng, mô
hình phần mềm; sau khi mô hình, tiến hành liên kết phần cứng, phần mềm và thực hiện

mô phỏng để đánh giá hệ thống; sau khi đánh giá hệ thống có thể quay lại cải tiến, tối ưu
phân chia phần cứng – phần mềm. Theo đó, phương pháp này có thể rút ngắn thời gian
9


phát triển hệ thống, tăng sự liên kết, phù hợp giữa phần cứng – phần mềm và có thể thực
hiện tối ưu mức hệ thống trong giai đoạn thiết kế dựa trên phân chia phần cứng – phần
mềm.

Hình 1.3: Quy trình phát triển hệ thống nhúng theo phương pháp đồng thiết kế
Hai phương pháp phát triển hệ thống nhúng trên đều gồm ba giai đoạn chính là
phát triển phần cứng, phát triển phần mềm và tích hợp. Quy trình phát triển phần mềm
nhúng cũng như phát triển phần mềm thông thường, gồm các bước chính theo mô hình
thác nước đó là phân tích, thiết kế, lập trình, kiểm thử, triển khai và bảo trì. Điểm khác
biệt chính là việc lập trình phần mềm nhúng thường gắn với một CPU và thường phải sử
dụng môi trường phát triển chéo. Phát triển phần cứng hệ thống nhúng thường được thực
hiện theo mô hình chữ Y như trong Hình 1.3. Phát triển phần cứng hệ thống nhúng được
chia thành bốn mức từ mức mạch đến mức hệ thống và được thiết kế theo ba khía cạnh là
chức năng, cấu trúc và bố cục vật lý. Trong mức hệ thống, dựa vào các thành phần cơ bản
như CPU, RAM, ROM, cache, v.v. để thiết kế, xây dựng lên hệ thống nhúng. Trong mức
CPU, các phần tử cơ bản là các đơn vị chức năng như ALU, CU, bộ cộng, bộ nhân, các
thanh ghi, v.v. được kết hợp để thiết kế, xây dựng CPU và các thành phần mức trên khác.
Các phần tử cơ bản trong mức CPU lại được thiết kế và xây dựng từ các cổng lôgic như
AND, OR, NOT, XOR, v.v. trong mức lôgic. Các cổng lôgic lại được thiết kế và xây
dựng từ các thiết bị bán dẫn trong mức mạch.
10


Hình 1.4: Quy trình thiết kế và xây dựng phần cứng
iii. Phương pháp dựa trên platform

Phương pháp dựa trên platform hướng đến khả năng tái sử dụng, tính linh động và
khả năng tái cấu trúc. Platform là một thư viện các thành phần được sử dụng như các
phần tử cơ bản để thiết kế phần cứng hoặc thiết kế, lập trình phần mềm. Platform phần
cứng có các mức trừu tượng khác nhau như mô tả trong Hình 1.5. Platform phần mềm có
thể bao gồm các mẫu thiết kế hoặc các thư viện chương trình và các API để phát triển
phần mềm. Platform phần mềm được mô tả như trong Hình 1.6.

11


Hình 1.5: Các mức trừu tượng của platform phần cứng

Hình 1.6: Mô tả platform phần mềm
Như vậy, quy trình phát triển phần mềm theo các phương pháp tiếp cận khác nhau
chỉ khác nhau chủ yếu ở giai đoạn thiết kế. Quy trình này gồm các công việc chính như:
đặc tả yêu cầu, phân chia phần cứng-phần mềm, phát triển phần cứng, phát triển phần
mềm, tích hợp hệ thống, kiểm thử, làm bản mẫu và sản xuất. Nội dung chi tiết trong các
giai đoạn này sẽ được trình bày trong các phần tiếp theo.

1.2.2. Các giai đoạn phát triển hệ thống nhúng
1.2.2.1. Xác định yêu cầu sản phẩm
Trong giai đoạn phân tích và thiết kế mức cao, hệ thống nhúng xem như một hệ
thống tính toán không phân biệt phần cứng, phần mềm. Do đó, giai đoạn xác định yêu cầu
cần làm rõ các vấn đề sau: các chức năng của hệ thống, những thành phần vào ra, giao
diện hệ thống. Trong hệ thống nhúng việc xác định yêu cầu là rất quan trọng. Đặc tả yêu
cầu có thể giúp chúng ta tránh được những vấn đề sau này như lượng RAM thiết kế cho
hệ thống nhúng không đủ cho hoạt động hay bộ xử lý được chọn có tốc độ quá chậm cho
công việc. Đồng thời, việc đặc tả yêu cầu còn là cơ sở để thẩm định trong các giai đoạn
thiết kế, triển khai và kiểm thử.
12



1.2.2.2. Lựa chọn chip
Sau giai đoạn xác định yêu cầu, trước khi phân chia phần cứng – phần mềm có một
bước nhỏ, ít được nghiên cứu là lựa chọn chip. Việc lựa chọn chip không được quan tâm
nhiều do mỗi họ CPU, vi điều khiển thường được sử dụng trong các lĩnh vực cụ thể của
hệ thống nhúng. Tuy nhiên, việc lựa chọn chip tốt cũng là tiền đề để xây dựng một hệ
thống nhúng tốt. Các kỹ thuật lựa chọn chip thường dựa vào đặc tả yêu cầu và các hồ sơ
sản phẩm. Những câu hỏi sau đây có thể hữu ích khi xác định xem sử dụng bộ vi xử lý có
hợp lý không:
Đầu vào và đầu ra được xử lý và cập nhật ở tốc độ nào? Mặc dù xung đồng hồ vẫn
đang tăng lên nhưng có một giới hạn trên thực tế với tốc độ bộ vi xử lý có thể đọc từ một
đầu vào hoặc cập nhật đầu ra và vẫn đang thực hiện công việc. Nếu hệ thống phải thực
hiện việc xử lý quan trọng, xử lý bộ đệm, hoặc những tính toán khác thì tỉ lệ cập nhật sẽ
giảm xuống.
Liệu có một mạch tích hợp đơn (IC) hoặc một thiết bị logic khả trình (PLD) thực
hiện được công việc không? nếu có thì sử dụng bộ vi xử lý là không cần thiết.
Hệ thống có nhiều đầu vào và ra, như công tắc hay màn hình hiển thị không? nếu có
thì bộ vi xử lý sẽ giải quyết công việc thuận lợi hơn.
Những giao diện đối với những hệ thống bên ngoài. Nếu hệ thống phải làm việc với
hệ thống khác dùng giao thức điều khiển liên kết dữ liệu đồng bộ (SDLC) hoặc một vài
giao thức truyền thông phức tạp khác thì sử dụng bộ vi xử lý là lựa chọn đúng đắn.
Hệ thống có phải tính toán và xử lý nhiều việc. Ví dụ hệ thống đánh lửa điện tử hiện
đại có rất nhiều đầu vào (các cảm ứng không khí, động cơ …) với những liên quan phức
tạp sẽ có vài lựa chọn thay vì sử dụng bộ vi xử lý.
Thiết kế có được sửa đổi khi hoàn thành hoặc thay đổi trong quá trình thiết kế. Có
cần phải tuỳ biến sản phẩm cho những phiên bản đặc biệt không. Những yêu cầu này đều
ảnh hưởng đến việc có lựa chọn bộ vi xử lý hay không.
Giả sử chúng ta đã quyết định sử dụng bộ vi xử lý cho hệ thống nhúng của mình thì
vấn đề tiếp theo là lựa chọn bộ vi xử lý cho phù hợp với hệ thống cần xây dựng. Thực tế

cho thấy có nhiều sự lựa chọn đúng bộ xử lý cho hệ thống nhúng bởi vì sẽ có vài bộ xử lý
có thể đạt các yêu cầu đặt ra. Sự lựa chọn bao gồm việc cân bằng các yếu tố giữa chi phí
và các chức năng. Một số vấn đề cần phải được xem xét khi lựa chọn:
- Số lượng chân vào ra yêu cầu
- Những giao tiếp yêu cầu
- Yêu cầu bộ nhớ
- Xem xét vấn đề thời gian thực
- Môi truờng phát triển
13


- Tốc độ xử lý được yêu cầu
- Khả năng của ROM
- Kiến trúc bộ nhớ

1.2.2.3 Phân chia giữa phần cứng và phần mềm
Như trình bày trong các phương pháp phát triển hệ thống nhúng trước đó, sau khi đặc
tả yêu cầu, việc phân chia phần cứng – phần mềm có vai trò quan trọng và khởi đầu để tạo
ra một sản phẩm nhúng tốt. Thông thường, phân chia phần cứng – phần mềm gắn liền với
phương pháp đồng thiết kế để tối ưu mức hệ thống trong giai đoạn thiết kế hệ thống
nhúng. Thiết kế hệ nhúng sẽ liên quan đến cả hai vấn đề là thiết kế các thành phần phần
cứng và các thành phần phần mềm, người thiết kế phải xác định xem vấn đề nào được giải
quyết trong phần cứng và vấn đề nào thì giải quyết ở phần mềm. Sự lựa chọn này được
gọi là phân bổ quyết định. Tuy nhiên, việc đánh giá các thành phần trong giai đoạn sớm
của chu kỳ phát triển gặp khó khăn và thường được đánh giá chính xác hơn trong các giai
đoạn cài đặt, sản xuất, thực thi. Phương pháp phân chia phần cứng – phần mềm phổ biến
là dựa trên tối ưu đa mục tiêu Pareto. Đồng thời việc đánh giá các thành phần ở mức hệ
thống trong giai đoạn thiết kế cũng được tiến hành theo hai phương pháp tiếp cận chính là
dựa trên mô phỏng và dựa trên kiểm chứng mô hình.
Trong phương pháp phát triển hệ thống nhúng truyền thống, những nhà phát triển

ứng dụng thường phát triển với phần cứng được xác định trước do đó có thể gặp những
khó khăn trong việc điều chỉnh về phần cứng để nâng cao hiệu quả. Đồng thời họ cũng có
thể đã gặp phải những vấn đề lựa chọn cân nhắc giữa phần cứng và phần mềm. Ví dụ,
trong thế hệ PC đầu tiên, những bộ xử lý 8086, 80286 và 80386 đều không có đơn vị xử
lý dấu phảy động trên chip. Những bộ xử lý này cần kết hợp với đơn vị xử lý dấu phảy
động như 8087, 80287 và 80387 để chạy trực tiếp các chỉ thị dấu phảy động trong chương
trình. Nếu PC không có một đơn vị xử lý dấu phẩy động, thì mã chương trình dịch phải
chuyển những chỉ thị dấu phảy động thành tập chỉ thị xử lý dấu phẩy tĩnh tương đương.
Nói cách khác, hệ thống sẽ thực hiện vấn đề xử lý dấu phảy động trên phần mềm. Tuy
nhiên điều này sẽ chậm hơn nhiều so với có đơn vị xử lý dấu phảy động trên bảng mạch.
Mặt khác, những yêu cầu cho phần cứng chặt chẽ hơn nhiều so với phần mềm bởi
vì nó phức tạp hơn và chi phí cho sản xuất và sửa lỗi phần cứng nhiều hơn so với sửa lỗi
phần mềm. Nếu phần cứng là IC chuyên về ứng dụng tùy biến (ASIC) thì càng phải xem
xét nhiều hơn vì tính phức tạp của việc thiết kế một IC tùy biến. Nếu cách tiết cận này
dường như quá rủi ro cho dự án, đội thiết kế có thể chuyển sang giải pháp phần mềm hoặc
đội thiết kế có thể đưa ra quyết định cần phải sử dụng một bộ xử lý mới hơn, mạnh hơn để
14


nâng cao hiệu năng. Hai phương pháp thiết kế khác nhau này đã được áp dụng thành công
cho thiết kế máy in laser. Một phương pháp thiết kế hướng các thành phần phần mềm
bằng cách lựa chọn bộ xử lý đủ mạnh và tối thiểu hoá dùng các thiết bị phần cứng chuyên
biệt. Phương pháp thiết kế ngược lại sử dụng các thiết bị phần cứng chuyên biệt để giảm
gánh nặng cho bộ xử lý. Cả hai đều có những sản phẩm cạnh tranh nhưng thực hiện hai
chiến lược thiết kế khác nhau cho phân chia các thành phần cứng và mềm. Tuy nhiên,
phương pháp tiếp cận mới cải tiến quá trình phát triển tuần tự phần cứng, phần mềm là
phương pháp đồng thiết kế. Phương pháp đồng thiết kế có sự tương tác giữa thiết kế phần
cứng, thiết kế phần mềm và tối ưu phân chia phần cứng – phần mềm. Phương pháp này sẽ
được trình bày chi tiết trong chương sau.


1.2.2.4 Giai đoạn phát triển
Trong giai đoạn này, các module phần cứng, phần mềm sẽ được đồng thiết kế và
phát triển. Việc phát triển hệ thống nhúng chia thành hai phần: phát triển phần cứng, phát
triển phần mềm. Sau đó phải tích hợp phần cứng, phần mềm cho hệ thống. Việc xây dựng
các module phần mềm cũng tuân theo các bước trong quy trình phát triển phần mềm như:
đặc tả phần mềm, thiết kế phần mềm, cài đặt phần mềm, kiểm thử module phần mềm và
kiểm thử tích hợp. Về việc xây dựng các thành phần phần cứng tuân theo các bước sau:
đặc tả phần cứng, thiết kế phần cứng, mô phỏng và xây dựng, kiểm thử module và kiểm
thử tích hợp. Sau khi phát triển xong phần cứng, phần mềm cần tích hợp chúng trong hệ
thống nhúng và tích hợp hệ thống nhúng trong hệ thống chứa. Do đó cần kiểm thử
module và kiểm thử tích hợp hệ thống nhúng trong hệ thống chứa.

1.2.2.5 Tích hợp phần cứng phần mềm
Giai đoạn tiếp theo sau khi phát triển phần cứng và phát triển phần mềm trong hệ
thống nhúng là tích hợp phần mềm vào phần cứng hệ thống nhúng. Giai đoạn tích hợp
giữa phần mềm và phần cứng phải có những công cụ đặc biệt và phương pháp để quản lý
độ phức tạp. Quy trình tích hợp phần cứng và phần mềm nhúng là quá trình thực nghiệm
và gỡ lỗi. Thông thường, việc dò vết và gỡ lỗi phần mềm trên các bộ mạch phần cứng cụ
thể có thể được thực hiện bằng các phần mềm mô phỏng. Trong quá trình tích hợp phải
xác định xem phần mềm có chạy tốt trên nền phần cứng không và có thực sự hiểu tài liệu
đặc tả phần cứng không. Ví dụ, một vấn đề về big endian/little endian trong quá trình tích
hợp. Người thiết kế phần cứng thực hiện thứ tự các byte được tổ chức theo big endian,
còn người thiết kế phần mềm cho rằng theo thứ tự little endian. Nghĩa là thành phần phần
15


mềm và phần cứng có thể đúng đắn trong quá trình phát triển riêng nhưng bị lỗi trong quá
trình tích hợp. Hình 1.7 dưới đây minh họa vấn đề big endian/little endian trong cổng tuần
tự được thiết kế cho một ASIC với một bus 16 bit vào ra. Cổng là vùng bộ nhớ ánh xạ tại
địa chỉ 0x400000, 8 bit của một từ là phần dữ liệu của cổng, 8 bít khác là phần trạng thái

của cổng. Thậm chí người thiết kế phần cứng có thể xác định những bit nào là trạng thái,
bit nào là dữ liệu thì người thiết kế phần mềm vẫn có thể gán sai địa chỉ cổng khi ghi vào
cổng theo cách truy cập byte.

Hình 1.7: Minh họa vấn đề big endian/little endian

16


1.2.2.6 Kiểm thử mức hệ thống nhúng
Do tính đa dạng và môi trường không đồng nhất của hệ thống nhúng so với hệ
thống PC nên kiểm thử hệ thống nhúng cần sự quan tâm đặc biệt vì không những nó phải
đảm bảo các chức năng của hệ thống hoạt động đúng và đủ mà còn phải đảm bảo cả về
yếu tố thời gian thực hiện. Việc kiểm thử hệ thống nhúng bao gồm kiểm thử phần cứng,
kiểm thử phần mềm, kiểm thử tích hợp phần cứng – phân mềm và kiểm thử tích hợp hệ
thống nhúng trong hệ thống chứa. Khác với việc kiểm thử phần mềm thông thường, việc
kiểm thử hệ thống nhúng thường tuân theo mô hình chữ V. Đồng thời các test case, các
ràng buộc trong hệ thống nhúng cũng phức tạp, đa dạng hơn.

17


CHƯƠNG 2: KIẾN TRÚC ARM VÀ VI ĐIỀU KHIỂN LÕI ARM
Vi xử lý ARM có nguồn gốc trong một công ty máy tính của Anh có tên là Acorn.
Vào giữa những năm 1980, người ta tìm kiếm vi xử lý để thay thế cho vi xử lý 6502 được
dùng rộng rãi trong các trường học ở Anh. Không có kiến trúc 16-bit nào thỏa mãn các
yêu cầu ở thời điểm đó. Vì thế vi xử lý 32-bit đã được thiết kế cho mục đích này.
Những công ty khác cũng quan tâm tới vi xử lý này, bao gồm Apple – công ty đang tìm
kiếm một vi xử lý cho dự án PDA của họ. Sau nhiều lần thương thảo dẫn tới kết quả là
nhóm thiết kế vi xử lý của Acorn tách ra khỏi Acorn vào cuối năm 1990 để trở thành công

ty Advanced RISC Machines Ltd, hay gọi tắt là ARM Ltd.

2.1. Tổng quan về vi xử lý ARM và vi điều khiển lõi ARM
ARM (Advanced RISC Machines) là bộ vi xử lý với kiến trúc tập lệnh RISC cải tiến.
Vi xử lý ARM đầu tiên là ARM1, ra đời năm 1985. Tuy nhiên, đến năm 1994, ARM7 ra
đời và phát triển rất thành công mới giúp ARM trở thành kiến trúc được lựa chọn của thế
giới kĩ thuật số. Trong vài năm qua, hơn 10 tỉ thiết bị có sử dụng chip ARM7 đã được ứng
dụng trong nhiều lĩnh vực của đời sống. Ngày nay, ARM7, ARM9, ARM-Cortex vẫn tiếp
tục được sử dụng rộng rãi để thiết kế các thiết bị 32 bit đặc biệt là các họ vi điều khiển
khác nhau. ARM tuân theo kiến trúc công nghiệp chuẩn, dễ thiết kế và gỡ lỗi. ARM được
ứng dụng trong các lĩnh vực chính sau:
- Nhúng trong thiết bị: USB controllers, HDD controllers, Bluetooth controllers,
Networking/WiFi, máy quét y khoa.
- Nhúng dân dụng: đồ chơi điện tử, thiết bị cầm tay, GPS, MP3 Player, máy thu phát
cầm tay.
- Tự động: chẩn đoán, bảo trì, giải trí, cảm ứng.
- Nhúng công nghiệp: đồng hồ năng lượng, bộ ngắt mạch, UPS, tự động hóa nhà
máy.
- Đầu đọc thẻ, máy ATM, máy tính tiền, máy bán hàng.
Họ ARM7 gồm có các vi xử lý: ARM7TDMI-S, ARM7TDMI, ARM7EJ-S. Quá
trình phát triển và các dòng vi xử lý dựa trên ARM7 được mô tả như trong Hình 2.1.

18


Hình 2.1. Quá trình phát triển và các dòng vi xử lý dựa trên ARM7
Một trong những lĩnh vực quan trọng của hệ thống nhúng là điều khiển và tự động
hóa. Để rút ngắt thời gian thiết kế và phát triển hệ thống nhúng, sử dụng các hệ thống tích
hợp trên chip (SoC – System on Chip) là một giải pháp tốt. Vi điều khiển là một dạng cụ
thể của SoC. Vi điều khiển là một vi mạch tích hợp bao gồm một vi xử lý và bộ nhớ

ROM, RAM và flash. Có nhiều họ vi điều khiển khác nhau như AVR, PIC, v.v. nhưng vi
điều khiển lõi ARM vẫn được dùng rộng rãi với các mức khác nhau của phần mềm nhúng
từ các chương trình nhúng đơn, đến mức máy ảo và mức hệ điều hành. Họ vi điều khiển
lõi ARM được tổng hợp trong Bảng 2.1.

19


Bảng 2.1. Tổng hợp các vi điều khiển lõi ARM
Vi xử


Các họ vi điều khiển theo hãng sản xuất
NXP

STMicroelectronics

Semiconductors

Atmel

Micro

ARM7

LPC2100,
LPC2200,
LPC2300,
LPC2400


STR7

ARM9

LPC2900,
LPC3100,
LPC3200

STR9

LPC1300,
ARM
Cortex- LPC1700,
M3
LPC1800

Energy

Texas
Instruments

SAM7S/SE
SAM7X/XC
SAM7L
AT91SAM9260
AT91SAM9263
SAM9XE
SAM9N/CN
SAM9R
SAM9G


STM32 F1, F2, L1,
W

EFM32 Tiny,
Gecko,
Leopard,
Giant

SAM3U
SAM3S
SAM3N
SAM3A
SAM3X

Stellari

2.2. Kiến trúc ARM Cortex M3
2.2.1. Giới thiệu ARM Cortex-M3
Bộ vi xử lý ARM Cortex-M3 là bộ xử lý ARM thế hệ mới cho các hệ thống nhúng.
Nó được phát triển để cung cấp một nền tảng chi phí thấp, đáp ứng yêu cầu thực thi của
MCU với việc giảm số bóng bán dẫn trong lõi ARM Cortex dẫn tới tiêu thụ năng lượng
thấp và giảm giá thành vi xử lí, đồng thời cung cấp hiệu năng tính toán cao và một hệ
thống tiên tiến để đáp ứng ngắt. Bộ vi xử lý ARM Cortex-M3 32-bit RISC đạt hiệu suất
cao hơn so với ARM7TDMI-S.
20


Dòng Cortex gồm có 3 phân nhánh chính: dòng A dành cho các ứng dụng cao cấp,
dòng R dành cho các ứng dụng thời gian thực như các đầu đọc và dòng M dành cho các

ứng dụng vi điều khiển và chi phí thấp.
Không giống với ARM7 được thiết kế theo kiến trúc Von Neumann (bộ nhớ chương
trình và bộ nhớ dữ liệu chung với nhau), Cortex-M3 được thiết kế dựa theo kiến trúc
Harvard (bộ nhớ chương trình và bộ nhớ dữ liệu tách biệt với nhau), và có nhiều bus cho
phép thực hiện các thao tác song song với nhau, do đó làm tăng hiệu suất của chip.
Bộ xử lý Cortex-M3 là một vi điều khiển được tiêu chuẩn hóa gồm một CPU 32 bit,
cấu trúc bus, đơn vị xử lý ngắt có hỗ trợ tính năng ngắt lồng nhau, hệ thống gỡ lỗi (debug
system) và tiêu chuẩn bố cục bộ nhớ.
Dòng Cortex được thiết kế hỗ trợ tập lệnh ARM Thumb-2, tập lệnh này được pha
trộn giữa tập lệnh 16 và 32 bit, nhằm đạt được hiệu suất cao của tập lệnh ARM 32-bit với
mật độ mã chương trình tối ưu của tập lệnh Thumb 16 bit. Tập lệnh Thumb-2 được thiết
kế đặc biệt dành cho trình biên dịch C/C++, tức là các ứng dụng dựa trên nền Cortex hoàn
toàn có thể được viết bằng ngôn ngữ C mà không cần đến chương trình khởi động viết
bằng Assembly như ARM7 và ARM9.

2.2.2. Kiến trúc ARM cortex M3
Vi xử lý ARM cortex M3 gồm một nhân cortex kết nối với bộ nhớ Flash thông qua
đường bus lệnh chuyên biệt. Các bus dữ liệu và bus hệ thống được kết nối tới ma trận bus
tốc độ cao như trên Hình 2.2 đã chỉ ra.
Bus
Bộ vi xử lý Cortex M3 được thiết kế dựa trên kiến trúc Harvard với bus mã (điều
khiển) và bus dữ liệu riêng biệt, làm tăng tốc độ tính toán.
Ma trận Bus
Bus hệ thống và bus dữ liệu được kết nối với vi điều khiển bên ngoài thông qua một
tập các bus tốc độ cao được sắp xếp như một ma trận bus.
Timer hệ thống
Lõi Cortex có một bộ đếm xuống 24-bit, với tính năng tự động nạp lại (auto reload)
giá trị bộ đếm và tạo sự kiện ngắt khi đếm xuống 0. Nó được tạo ra với dụng ý cung cấp
một bộ đếm thời gian chuẩn cho tất cả vi điều khiển dựa trên Cortex. Đồng hồ hệ thống
được sử dụng để cung cấp một nhịp cho một RTOS, hoặc để tạo ra một ngắt có tính chu

kì để phục vụ cho các tác vụ được lập lịch. Thanh ghi trạng thái và điều khiển của đồng
hồ hệ thống trong đơn vị không gian điều khiển hệ thống Cortex-M3 cho phép chọn các
nguồn xung nhịp.
21


Hình 2.2. Các thành phần chính của ARM Cortex – M3

Xử lý ngắt
Một trong những cải tiến quan trọng của lõi Cortex so với các CPU ARM trước đó là
cấu trúc ngắt của nó và xử lý các ngắt ngoại lệ (exception handling). Phát triển hệ thống
22


nhúng đòi hỏi tính thời gian thực cao. Điều này được giải quyết nhờ tốc độ ngắt đơn rất
nhanh và một số phương pháp như xây dựng quyền ưu tiên ngắt, giảm thời gian trễ xuống
tối thiểu giữa các lần phục vụ nhắc.
Các thiết bị ngoại vi
Các cổng I/O đa dụng: có 5 cổng được đánh số từ A -> E với mức áp tiêu thụ ở 5V.
Nhiều chân ngoại có thể cấu hình như Input/Output tương tác với các thiết bị của người
dùng (UART), ngoài ra còn đóng vai trò nguồn gốc ngoại kết hợp với cổng GPIO khác.

2.2.3. Mô hình giao tiếp ARM
Vi điều khiển ARM được thực thi trên hệ thống kiến trúc các bus truyền dữ liệu đa
chức năng của vi điều khiển. Bao gồm bộ xử lý ARM kết nối qua hệ thống bus truyền dữ
liệu hiệu suất cao để đồng bộ nhanh với SRAM, các bus giao tiếp ngoài, và cầu nối tới
các bus truyền ngoại vi công suất thấp, được mô tả trong hình 2.3. Thiết bị ngoại vi bên
ngoài được xây dựng từ các thiết bị riêng và tùy theo ứng dụng người dùng.

Hình 2.3. Mô hình giao tiếp ARM

Các khối chức năng trong vi điều khiển ARM bao gồm:
- Bộ xử lý ARM;
- Bộ điều khiển ngắt;
- Bộ phân xử bus truyền hiệu suất cao (AHB - Advanced High-performance Bus);
- Bộ điều khiển bộ nhớ;
- SRAM;
- EPROM hoặc Flash;
- DRAM;
- Cầu nối AHB – APB (Advanced Peripheral Bus: Bus truyền ngoại vi tối ưu)
23


- Cầu nối ngoài AHB;
- Bộ đếm/định thời;
- Khối SPI (Serial Peripheral Interface): Khối giao tiếp các thiết bị ngoại vi nối tiếp;
- Khối Serial UART (Serial Universal Asynchronous Receiver/Transmitter): Khối
giao tiếp nối tiếp truyền/thu không đồng bộ đa năng.

2.2.4. Một số giao tiếp ARM
i. Giao tiếp bộ nhớ
Trong vi điều khiển ARM, bộ nhớ nội có thể có các dạng như: SSRAM, SRAM,
DRAM, EPROM/Flash. Bản đồ bộ nhớ được mô tả như hình 2.4 dưới đây:

Hình 2.4. Bản đồ bộ nhớ
Bản đồ bộ nhớ có hai trạng thái:
- Trạng thái Reset.
- Trạng thái thông thường: sau khi đã được ánh xạ các thanh ghi định địa chỉ vào.
Trong cấu hình thông thường (đã được định địa chỉ), ký hiệu vùng RAM là từ địa chỉ
0x0 đến 0x04000000. Trong cấu hình Reset, ROM được ánh xạ vào không gian được ký
hiệu với khả năng truy cập RAM ở địa chỉ cao hơn.

ii. Giao tiếp với bộ điều khiển ngắt
Bộ điều khiển ngắt trong ARM cung cấp giao tiếp phần mềm độc lập cho hệ thống
ngắt. Các bit ngắt được định nghĩa cho yêu cầu chức năng cơ bản trong thiết kế hệ thống.
Trong hệ thống ARM có hai mức ngắt:
24


- FIQ (Fast Interrupt Request) dành cho ngắt nhanh.
- IRQ (Interrupt Request) dành cho các ngắt chung.
Các bộ điều khiển ngắt được chia ra để sử dụng cho FIQ và IRQ, chỉ khác ở vị trí
một bit riêng được định rõ cho bộ điều khiển FIQ, các bit còn lại trong bộ điều khiển ngắt
này dành cho nguồn ngắt độc lập trong 32 bit của bộ điều khiển IRQ và được mô tả trong
hình 2.5.

Hình 2.5. Bộ điều khiển ngắt FIQ và IRQ
iii. Giao tiếp bộ định thời
Mỗi một bộ định thời là một bộ đếm ngược rộng 16 bit, có thể lựa chọn phân chia tần
số đầu vào. Bộ định thời có hai chế độ hoạt động là kiểu đếm tự do và kiểu tuần hoàn.
Trong chế độ định thời tuần hoàn bộ đếm sẽ tạo ra một ngắt tại một khoảng thời gian.
Trong chế độ định thời tự do, bộ định thời sẽ tràn bộ đếm sau khi đến giá trị 0 và tiếp tục
đếm ngược từ giá trị cực đại.
Bộ định thời được kích hoạt bằng một bit trong thanh ghi điều khiển. Việc khởi động
lại sẽ làm bộ định thời được xóa, ngắt sẽ được xóa và thanh ghi nạp sẽ không xác định.
iv. Giao tiếp UART
Giao tiếp UART là giao tiếp nối tiếp, có các tính năng sau:
- Cấp tín hiệu cho các đầu vào bộ điều khiển;
- Điều khiển đầu ra tín hiệu;
- Thiết lập tốc độ baud;
- Truyền và nhận 16 byte FIFO;
- Đưa ra các ngắt.

UART trên vi điều khiển ARM hỗ trợ cả hai kiểu giao tiếp là giao tiếp song công và
giao tiếp bán song công. Giao tiếp song công tức là có thể gửi và nhận dữ liệu vào cùng
một thời điểm. Còn giao tiếp bán song công là chỉ có một thiết bị có thể truyền dữ liệu
vào một thời điểm, với tín hiệu điều khiển hoặc mã sẽ quyết định bên nào có thể truyền
25


Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×