Description
Chúng ta có thể dễ dàng tìm thấy các hệ thống nhúng (tên tiếng Anh là Embedded System) ở khắp mọi nơi trong cuộc sống hàng ngày. Hệ thống nhúng đang làm cho thế giới thông minh hơn và tiện lợi hơn. Số lượng các hệ thống nhúng đang phát triển nhanh chóng, đặc biệt là trong các ứng dụng vạn vật kết nối Internet IoT (viết tắt của cụm từ tiếng Anh Internet-of-Things) và truyền thông không dây. Thị trường hệ thống nhúng là một trong những lĩnh vực phát triển nhanh nhất trên thế giới. Như tên gọi, hệ thống nhúng là một hệ thống máy tính có mục đích đặc biệt được thiết kế để thực hiện các chức năng chuyên dụng. Một số hệ thống nhúng có ràng buộc thời gian thực được gọi là hệ thống nhúng thời gian thực (tên tiếng Anh là Real-time Embedded System). Một hệ thống nhúng bao gồm phần cứng và phần mềm đi kèm. Phần cứng bao gồm một bộ vi xử lý hoặc vi điều khiển với bộ nhớ ngoài gắn thêm, I/O và các thành phần khác như cảm biến, bàn phím, đèn LED, màn hình LCD và bất kỳ loại thiết bị truyền động nào. Phần mềm nhúng là trí não của một hệ thống nhúng. Hầu hết phần mềm hệ thống nhúng thời gian thực có các chương trình ứng dụng cụ thể được hỗ trợ bởi hệ điều hành thời gian thực RTOS (viết tắt của cụm từ tiếng Anh Real-time Operating System). Phần mềm nhúng thường được gọi là “firmware” vì phần mềm loại này được nạp vào bộ nhớ ROM, EPROM hoặc Flash, và sau khi được nạp vào hệ thống nhúng nó sẽ không bao giờ bị thay đổi trừ khi cần phải cập nhật lại hoặc thay thế.
Đối với một máy tính đa năng, người dùng có thể cài đặt bất kỳ phần mềm nào để thực hiện tất cả các loại công việc như xử lý văn bản, lướt web, quản lý cơ sở dữ liệu và những công việc khác tùy theo mục đích của mình. Trái lại, hệ thống nhúng chỉ được sử dụng để thực hiện lặp đi lặp lại các chức năng được chỉ định cụ thể. Hệ thống nhúng đã được sử dụng trong hơn nửa thế kỷ kể từ khi bộ vi xử lý được phát triển. Chip vi xử lý Intel đầu tiên được thiết kế cho máy tính và các hệ thống đơn giản khác vào năm 1960. Kể từ đó, khi chi phí của bộ vi xử lý và vi điều khiển giảm xuống và năng lực chức năng được tăng cường, việc thay thế nhiều sản phẩm và hệ thống đắt tiền bằng các hệ thống nhúng trên cơ sở bộ vi xử lý hoặc vi điều khiển trở nên khả thi.
Kể từ đầu những năm 2000, hàng trăm công ty đã được cấp phép sử dụng kiến trúc vi xử lý ARM trong các sản phẩm của họ. Hiện nay, số lượng các công ty được cấp phép đang tăng lên rất nhanh. Mặc dù người được cấp phép phải tuân theo tập lệnh và kiến trúc vi xử lý ARM, họ có thể tự do triển khai các thiết bị ngoại vi như cổng I/O, ADC, Timers, DAC, SPI, I2C và UART, … khi họ muốn. Từ góc độ lập trình, trong khi chúng ta có thể viết chương trình bằng hợp ngữ cho lõi vi xử lý ARM và chạy nó trên bất kỳ chip ARM nào, thì chương trình được viết cho các cổng I/O của chip ARM cho công ty A sẽ không chạy trên chip ARM từ công ty B. Điều này là do các thanh ghi chức năng đặc biệt và vị trí địa chỉ vật lý của chúng để truy cập các cổng I/O không được chuẩn hóa và mỗi người được cấp phép thực hiện nó khác nhau.
ARM lần đầu tiên giới thiệu dòng vi xử lý Cortex-M vào năm 2004. Kể từ đó, bộ xử lý Cortex-M đã nhận được sự chấp nhận rộng rãi như một bộ xử lý đa năng có khả năng mở rộng cao cho các vi điều khiển nhỏ. Tại thời điểm viết cuốn sách này, ARM tiếp tục là kiến trúc hàng đầu cho IoT và các thiết bị nhúng với kỷ lục 4,4 tỷ chip dựa trên vi xử lý Cortex-M được xuất xưởng trong quý 4 năm 2020 (Theo “Record Shipments” trên trang web https://www.arm.com/). Chúng có sẵn từ nhiều nhà cung cấp linh kiện bán dẫn hàng đầu và tốc độ phát triển không có dấu hiệu chậm lại. Dòng vi xử lý Cortex-M hiện đã trở thành một tiêu chuẩn công nghiệp. Vì vậy, kiến thức về cách sử dụng nó đang trở thành một kỹ năng cần thiết cho các nhà phát triển hệ thống nhúng chuyên nghiệp.
Cuốn sách này nhằm mục đích vừa giới thiệu về các bộ xử lý ARM Cortex-M vừa hướng dẫn các nguyên tắc và kỹ thuật cơ bản về thiết kế và phát triển phần mềm ứng dụng chạy trên chúng. Trọng tâm được nhấn mạnh vào khía cạnh phát triển phần mềm của hệ thống nhúng. Cuốn sách được viết như một tài liệu hướng dẫn và các chương được sắp xếp theo trình tự từ các vấn đề đơn giản đến phức tạp. Mỗi chương có một số ví dụ trình bày các nguyên tắc chính được nêu trong cuốn sách này bằng cách sử dụng một lượng mã tối thiểu. Mỗi ví dụ được thiết kế để chạy trên bo mạch phát triển FRDM-KL46Z được trang bị bộ vi xử lý Cortex-M0. Người đọc sẽ được trải nghiệm thực tế về việc tự xây dựng các hệ thống nhúng qua các ví dụ cụ thể với cuốn sách này.
Kết cấu của cuốn sách
Cuốn sách gồm 2 phần được chia làm 15 chương.
PHẦN I CƠ BẢN
Chương 1 Giới thiệu về hệ thống máy tính nhúng
Chương 2 Ngôn ngữ lập trình C cho các hệ thống nhúng ARM
Chương 3 Giới thiệu về nền tảng máy tính nhúng FRDM-KL46Z
Chương 4 Vi xử lý ARM Cortex-M
Chương 5 Ghép nối ngoại vi số qua cổng GPIO
Chương 6 Ghép nối với thiết bị hiển thị
Chương 7 Ghép nối với cổng nối tiếp UART
Chương 8 Lập trình Timer
PHẦN II NÂNG CAO
Chương 9 Ghép nối ngoại vi sử dụng cơ chế ngắt
Chương 10 Ghép nối ngoại vi qua ADC và DAC
Chương 11 Ghép nối với thanh trượt cảm biến điện dung
Chương 12 Ghép nối ngoại vi qua chuẩn giao tiếp I2C
Chương 13 Ghép nối ngoại vi qua chuẩn giao tiếp SPI
Chương 14 Ghép nối với cơ cấu chấp hành
Chương 15 Hệ điều hành thời gian thực
Nội dung mỗi chương đều được minh họa bằng các ví dụ cụ thể và sinh động với phần lớn lấy từ các tình huống ứng dụng thực tế nhằm giúp người đọc nhanh chóng nắm bắt được kiến thức và có thể áp dụng dễ dàng kiến thức đó vào trong thực tiễn.
Cuốn sách này hữu ích cho sinh viên, người mới bắt đầu cũng như các nhà phát triển chuyên nghiệp và có kinh nghiệm về hệ thống nhúng với vi xử lý Cortex-M của ARM. Tuy nhiên, khi viết cuốn sách này người viết cũng giả định rằng bạn đọc đã có kiến thức cơ bản về cách sử dụng vi điều khiển và đã quen với việc lập trình bằng ngôn ngữ C. Ngoài ra, sẽ rất hữu ích nếu bạn đọc có kiến thức cơ bản về cách sử dụng trình gỡ lỗi Keil μVision và IDE.
Các chương trình và ví dụ được trình bày trong cuốn sách đã được kiểm tra kỹ nhưng không thể tránh khỏi còn mắc lỗi. Rất mong bạn đọc góp ý để tác giả hoàn thiện cuốn sách. Mọi góp ý xin gửi về địa chỉ email hungnvnu@gmail.com.
MỤC LỤC
PHẦN I CƠ BẢN.. 14
Chương 1 Giới thiệu về hệ thống máy tính nhúng. 15
1.1. Khái niệm tổng quát về hệ thống máy tính. 15
1.2. Phân biệt giữa hệ thống máy tính nhúng và hệ thống máy tính thông dụng. 16
1.3. Các đặc tính của hệ thống máy tính nhúng. 19
1.4. Các thách thức trong thiết kế hệ thống máy tính nhúng. 20
1.5. Các thành phần phần cứng của hệ thống máy tính nhúng. 22
1.5.1. Bộ vi xử lý. 22
1.5.2. Các mạch tích hợp chuyên dụng ASIC.. 27
1.5.3. FPGA.. 28
1.5.4. Bộ nhớ. 28
1.5.5. Giao diện ghép nối I/O.. 32
1.5.6. Cảm biến. 33
1.5.7. Bộ truyền động. 34
1.5.8. Các bộ định thời và bộ đếm.. 35
1.5.9. Bus. 37
1.6. Các thành phần phần mềm và công cụ phát triển. 39
1.6.1. Các thành phần phần mềm.. 39
1.6.2. Công cụ phát triển. 40
1.7. Công cụ và kỹ thuật gỡ lỗi 42
Chương 2 Ngôn ngữ lập trình C cho các hệ thống nhúng ARM… 45
2.1. Lập trình các hệ thống nhúng. 45
2.2. Lập trình C.. 46
2.3. Chương trình C nhúng mẫu. 47
2.4. Các loại dữ liệu. 48
2.5. Ép kiểu dữ liệu. 54
2.6. Dẫn hướng biên dịch. 55
2.6.1. Định nghĩa macro. 55
2.6.2. Biên dịch có điều kiện. 56
2.6.3. Bao gồm các tệp (#include) 58
2.6.4. Nhúng mã hợp ngữ. 59
2.7. Các toán tử xử lý theo từng bit Bitwise. 59
2.7.1. Mặt nạ bit 60
2.7.2. Kiểm tra một bit 63
2.7.3. Toán tử kết hợp. 64
2.8. Biến và hằng số. 64
2.8.1. Const 65
2.8.2. Static. 66
2.8.3. Volatile. 68
2.8.4. Register 70
2.8.5. Automatic. 72
2.8.6. Extern. 73
2.8.7. Phạm vi biến. 73
2.9. Con trỏ. 75
2.9.1. Khai báo biến con trỏ. 76
2.9.2. Cách sử dụng biến con trỏ. 76
2.10. Cấu trúc. 77
2.10.1. Định nghĩa một cấu trúc. 77
2.10.2. Truy cập các thành viên của một cấu trúc. 78
2.11. Hàm.. 80
2.11.1. Truyền tham số bằng giá trị 81
2.11.2. Truyền tham số bằng tham chiếu. 83
2.11.3. Macro dạng hàm.. 85
Chương 3 Giới thiệu về nền tảng máy tính nhúng FRDM-KL46Z 86
3.1. Các đặc tính chính của kit FRMD-Kl46Z. 86
3.2. Vi điều khiển Freesacle KL46Z256VLL4. 89
3.3. Giao diện nạp chương trình OpenSDA tích hợp sẵn trên Kit 91
3.4. Khối tạo xung nhịp. 94
Chương 4 Vi xử lý ARM Cortex-M… 99
4.1. Tổng quan về vi xử lý ARM.. 99
4.2. Dòng vi xử lý Cortex-M.. 101
4.2.1. Các tính năng phổ biến trong bộ vi xử lý Cortex-M… 103
4.2.2. Tính tương thích giữa các bộ vi xử lý Cortex-M… 105
4.2.3. Cortex-M0. 107
4.2.4. Cortex-M0+. 110
4.2.5. Cortex-M3. 112
4.2.6. Cortex-M4. 114
4.2.7. Cortex-7. 115
4.3. Tập lệnh ARM.. 116
4.4. Kiến trúc vi xử lý Cortex-M.. 120
4.4.1. Mô hình lập trình. 120
4.4.2. Các thanh ghi 122
4.4.3. Thanh ghi đặc biệt 125
4.4.4. Bản đồ bộ nhớ Cortex-M và Bus. 132
Chương 5 Ghép nối ngoại vi số qua cổng GPIO.. 134
5.1. Các chân I/O trên kit FRDM-KL46Z. 134
5.2. Mạch cấp clock cho các cổng I/O.. 137
5.3. Khối GPIO.. 139
5.3.1. Địa chỉ của các khối GPIO.. 139
5.3.2. Các thanh ghi bên trong mỗi cổng GPIO.. 140
5.4. Ghép nối LED với cổng GPIO trên bo mạch FRDM-KL46Z. 144
5.4.1. Điều khiển bật/tắt đèn LED xanh trên bo mạch FRDM-KL46Z 145
5.4.2. Điều khiển bật/tắt hai đèn LED ở tốc độ khác nhau. 151
5.4.3. Điều khiển LED ba màu (tri-color LED) 153
5.5. Ghép nối đèn LED 7-đoạn với cổng GPIO.. 155
5.6. Ghép nối phím bấm với cổng GPIO trên bo mạch FRDM-KL46Z 160
5.6.1. Lập trình đọc trạng thái phím bấm.. 162
5.6.2. Ghép nối với bàn phím.. 164
Câu hỏi ôn tập. 170
Chương 6 Ghép nối với thiết bị hiển thị 172
6.1. Một số ưu điểm của LCD.. 172
6.2. Lập trình ghép nối với LCD.. 172
6.2.1. Gửi lệnh tới LCD.. 177
6.2.2. Gửi dữ liệu lên màn hình LCD.. 178
6.2.3. Kiểm tra cờ trạng thái bận của LCD.. 180
6.2.4. Giao diện ghép nối LCD 4 bit 184
6.2.5. Vị trí con trỏ trên LCD.. 187
6.3. Lập trình ghép nối với LCD đồ họa. 187
6.3.1. LCD đồ họa. 187
6.3.2. Hiển thị văn bản trên LCD đồ họa. 194
Câu hỏi ôn tập. 200
Chương 7 Ghép nối với cổng nối tiếp UART.. 202
7.1. Khái niệm cơ bản về giao tiếp nối tiếp. 202
7.1.1. Truyền song công toàn phần và bán song công. 204
7.1.2. Giao tiếp nối tiếp không đồng bộ và khung dữ liệu. 205
7.1.3. RS232 và các tiêu chuẩn I/O nối tiếp khác. 207
7.2. Lập trình cổng UART. 209
Câu hỏi ôn tập. 236
Chương 8 Lập trình Timer. 238
8.1. Giới thiệu về bộ đếm và bộ định thời 238
8.1.1. Đếm sự kiện. 239
8.1.2. Tạo thời gian trễ. 240
8.1.3. Đo thời gian giữa hai sự kiện. 240
8.1.4. Bộ đếm và bộ định thời trong các vi điều khiển. 241
8.2. Bộ định thời System tick timer. 241
8.3. Các bộ định thời của vi điều khiển KL46Z. 249
8.4. Các kênh TPM và chức năng so sánh đầu ra. 263
8.5. Sử dụng bộ định thời trong chế độ chụp đầu vào. 273
8.6. Sử dụng bộ định thời làm bộ đếm sự kiện. 277
Câu hỏi ôn tập. 280
PHẦN II NÂNG CAO.. 281
Chương 9 Ghép nối ngoại vi sử dụng cơ chế ngắt 282
9.1. Khái niệm ngắt và ngoại lệ trong ARM Cortex-M.. 282
9.1.1. Cơ chế ngắt và hỏi vòng. 282
9.2. Các chế độ hoạt động của ARM Cortex-M.. 295
9.3. Lập trình ngắt cho cổng I/O.. 295
9.4. Lập trình ngắt cổng nối tiếp UART. 309
9.5. Lập trình ngắt của bộ định thời 313
9.6. Lập trình ngắt của bộ định thời SysTick. 316
9.7. Lập trình mức ưu tiên ngắt trong vi điều khiển NXP KL46Z. 319
Câu hỏi ôn tập. 324
Chương 10 Ghép nối ngoại vi qua ADC và DAC.. 326
10.1. Các đặc trưng của ADC.. 326
10.2. Lập trình ADC trên bo mạch FRDM-KL46Z. 333
10.3. Ghép nối với cảm biến. 349
10.3.1. Ghép nối với cảm biến nhiệt độ. 349
10.3.2. Ghép nối với cảm biến ánh sáng. 355
10.4. Lập trình ghép nối với DAC.. 358
10.4.1. Tạo tín hiệu răng cưa. 364
10.4.2. Tạo sóng sin. 365
Câu hỏi ôn tập: 370
Chương 11 Ghép nối với thanh trượt cảm biến điện dung. 371
11.1. Mô-đun TSI 371
11.1.1. Tổng quan về mô-đun TSI 371
11.1.2. Hoạt động chức năng. 374
11.2. Lập trình ghép nối mô-đun TSI với thanh trượt cảm biến điện dung 379
Chương 12 Ghép nối ngoại vi qua chuẩn giao tiếp I2C.. 383
12.1. Giao diện ghép nối I2C.. 383
12.1.1. Kết nối trên bus I2C.. 383
12.1.2. Các nút trên bus I2C.. 385
12.1.3. Chuỗi báo hiệu cho truyền dữ liệu. 385
12.1.4. Định dạng bit 386
12.1.5. Định dạng khung truyền trong I2C.. 388
12.1.6. Định dạng Byte địa chỉ 389
12.1.7. Định dạng byte dữ liệu. 390
12.1.8. Kết hợp địa chỉ và byte dữ liệu. 390
12.1.9. Kéo dài xung nhịp. 392
12.1.10. Hoạt động trọng tài 392
12.1.11. Ghi nhiều byte theo loạt 393
12.1.12. Đọc nhiều byte theo loạt 393
12.2. Mô-đun I2C trên bo mạch FRDM-KL46Z. 394
12.2.1. Cấp xung nhịp clock cho mô-đun I2C.. 394
12.2.2. Thiết lập tốc độ xung nhịp. 395
12.2.3. Thiết lập Master hay Slave. 398
12.2.4. Quy trình các bước lập trình mô-đun I2C.. 402
12.3. Lập trình ghép nối đồng hồ thời gian thực DS1337 qua bus I2C 405
12.4. Lập trình ghép nối với cảm biến từ trường. 422
12.5. Ghép nối với cảm biến gia tốc. 422
Chương 13 Ghép nối ngoại vi qua chuẩn giao tiếp SPI. 423
13.1. Giao thức bus SPI 423
13.1.1. Các tín hiệu trên bus SPI 423
13.1.2. Nguyên lý làm việc của SPI 427
13.1.3. Phân cực và pha của xung nhịp trong giao thức SPI 429
13.2. Lập trình SPI trên NXP ARM KL46Z. 431
Câu hỏi ôn tập: 434
Chương 14 Ghép nối với cơ cấu chấp hành. 436
14.1. Rơle và Bộ cách ly quang. 436
14.2. Ghép nối với mô-tơ bước. 443
14.3. Ghép nối với động cơ DC và điều chế độ rộng xung PWM.. 452
14.3.1. Động cơ DC.. 453
14.3.2. Điều chế độ rộng xung (PWM) 458
14.3.3. Điều khiển động cơ DC với bộ cách ly quang. 459
14.4. Lập trình điều chế độ rộng xung PWM với vi điều khiển ARM KL46Z 461
14.4.1. Nguồn xung nhịp cho mô-đun PWM… 461
14.4.2. PWM được căn chỉnh theo cạnh. 465
14.4.3. Điều chế PWM được căn chỉnh trung tâm.. 474
14.4.4. Chế độ căn theo sườn so với chế độ căn giữa. 478
14.4.5. Tạo dải chết (Dead-Band) 479
Câu hỏi ôn tập. 481
Chương 15 Hệ điều hành thời gian thực. 483
15.1. Các chức năng chính của một hệ điều hành đa năng. 484
15.1.1. Quản lý tiến trình. 485
15.1.2. Quản lý bộ nhớ. 487
15.1.3. Quản lý ngắt 490
15.1.4. Đa nhiệm.. 491
15.1.5. Quản lý hệ thống tệp. 492
15.1.6. Quản lý I/O.. 494
15.2. Các đặc trưng của nhân RTOS. 494
15.2.1. Đồng hồ và bộ đếm thời gian. 497
15.2.2. Lập lịch ưu tiên. 498
15.2.3. Truyền thông giữa các nhiệm vụ và chia sẻ tài nguyên. 499
15.2.4. Hoạt động I/O không đồng bộ. 501
15.2.5. Khóa bộ nhớ. 502
15.3. Hệ điều hành CMSIS-RTOS RTX.. 503
15.3.1. Khởi động RTOS. 506
15.3.2. Tạo các luồng. 507
15.4. Điều khiển đèn LED bằng hệ điều hành CMIS-RTOS RTX.. 509
15.4.1. Thiết lập dự án. 509
15.4.2. Tùy chỉnh nhân CMSIS-RTOS RTX.. 511
15.4.3. Tạo các tệp mã nguồn. 511
Phụ Lục A Hướng dẫn sử dụng Kit FRDM-KL46Z.. 515
A.1 Cài đặt Driver. 515
A.2 Chạy chương trình demo. 515
A.3 Giao diện OpenSDA.. 517
Phụ Lục B Cài đặt và sử dụng phần mềm Keil MDK-ARM… 522
B.1 Cài đặt phần mềm Keil MDK-ARM… 522
B.2 Tạo project với Keil MDK-ARM… 523
B.3 Biên dịch và nạp chương trình vào kit 533
TÀI LIỆU THAM KHẢO.. 537
Reviews
There are no reviews yet.