Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 276 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
276
Dung lượng
14,3 MB
Nội dung
HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THƠNG NGUYỄN NGỌC MINH LƯƠNG CÔNG DUẨN BÀI GIẢNG HỆ THỐNG NHÚNG HÀ NỘI – 10.2019 MỤC LỤC MỤC LỤC DANH MỤC CÁC HÌNH DANH MỤC BẢNG BIỂU CHƯƠNG - GIỚI THIỆU CHUNG VỀ HỆ THỐNG NHÚNG 10 1.1 Khái niệm Hệ thống nhúng (Embedded system) 10 1.2 Lịch sử phát triển hệ thống nhúng 11 1.3 Các đặc điểm hệ thống nhúng 11 1.3.1 Giao diện 12 1.3.2 Kiến trúc CPU 12 1.4 Kiến trúc điển hình hệ thống nhúng 14 Một số kiến trúc phần mềm hệ thống nhúng 15 1.5 Phân loại hệ thống nhúng 18 1.6 Phạm vi ứng dụng hệ thống nhúng 18 1.7 Các yêu cầu kĩ thiết kế hệ thống nhúng 18 1.7.1 Quản lý, tích hợp, thiết kế hệ thống: 21 1.7.2 Thiết kế, phát triển phần mềm ứng dụng 22 1.7.3 Thiết kế firmware 22 1.7.4 Thiết kế mạch, PCB: 23 1.7.5 Thiết kế vi điện tử: Linh kiện, IP, IC, phụ kiện 23 Câu hỏi ôn tập 25 CHƯƠNG 2: CÁC THÀNH PHẦN HỆ THỐNG 26 2.1 Các thành phần phần cứng 26 2.1.1 Bộ xử lý nhúng 26 2.1.2 Bộ nhớ 35 2.1.3 Bảng mạch Vào/Ra 37 2.1.5 Hệ thống Bus 46 2.2 Các thành phần phần mềm hệ thống: 56 2.2.1 Trình điều khiển thiết bị 56 2.2.2 Hệ điều hành thời gian thực 58 2.2.3 Middleware 59 2.2.4 Phần mềm ứng dụng 62 Câu hỏi ôn tập 64 CHƯƠNG - HỆ ĐIỀU HÀNH THỜI GIAN THỰC DÙNG CHO CÁC HỆ THỐNG NHÚNG 66 3.1 Yêu cầu chung cho hệ điều hành thời gian thực 66 3.2 Các chức phần lõi hệ điều hành thời gian thực 67 3.2.1 Kernel 67 3.2.2 Tác vụ Multi-tasking 68 3.3.3 Lập lịch thời gian thực (Real-time Scheduling) 71 3.3.4 Đồng 73 3.2.5 HAL (Hardware Abstraction Layer) 75 3.3 Giới thiệu hệ điều hành thời gian thực 76 3.3.1 FreeRTOS: 76 3.3.2 Windows CE: 88 3.3.3 Hệ điều hành Embedded Linux: 90 3.3.4 Hệ điều hành uCLinux: 91 Câu hỏi ôn tập 92 CHƯƠNG 4: THIẾT KẾ VÀ CÀI ĐẶT CÁC HỆ THỐNG NHÚNG 93 4.1 Thiết kế hệ thống 93 4.1.1 Xác định yêu cầu 93 4.1.2 Đặc tả 95 4.1.3 Phân hoạch phần cứng - phần mềm 98 4.1.4 Thiết kế hệ thống 109 4.2 Cài đặt thử nghiệm hệ thống nhúng 129 Câu hỏi ôn tập 132 CHƯƠNG 5: PHÁT TRIỂN HỆ THỐNG NHÚNG DỰA TRÊN HỆ VI XỬ LÝ NHÚNG 133 5.1 Giới thiệu chung 133 5.2 Kiến trúc hệ vi xử lý nhúng ARM 133 Lõi ARM 133 Thanh ghi chế độ hoạt động 134 Pipeline 136 Cấu trúc bus: 138 Tập lệnh ARM 138 Các lệnh xử lý liệu 139 Các lệnh rẽ nhánh 141 Các lệnh chuyển liệu Load- Store 142 Tập lệnh Thumb 147 5.3 Giới thiệu dòng vi xử lý ARM Cortex ARM Cortex M3 148 Các dòng ARM Cortex 148 Vi điều khiển STM32F1 150 Lập trình ghi 153 Chuẩn CMSIS 153 Thư viện Standard Peripheral Library (SPL) 155 Quy trình lập trình chương trình STM32F1 157 Bộ ghi RCC (Register Clock Control) 158 Lập trình điều khiển IO với STM32F1 sử dụng ghi 159 Lập trình điều khiển IO với STM32F1 sử dụng SPL 168 Lập trình Systick 175 Lập trình điều khiển Timer 180 Lập trình điều chế độ rộng xung - PWM (Pulse-width modulation) 186 Lập trình điều khiển UART 191 Lập trình điều khiển SPI 199 Lập trình ADC 211 Lập trình DAC 216 Lập trình với FreeRTOS 220 5.4 Thiết lập hệ điều hành nhúng ARM 240 Firmware Bootloader 240 Hệ thống file (Filesystem) 241 Thiết lập nhân (kernel) 242 PHỤ LỤC 247 TÀI LIỆU THAM KHẢO 276 DANH MỤC CÁC HÌNH Hình 1: Mơ hình chung hệ thống nhúng 15 Hình 2: Cấu trúc thiết bị điện tử 20 Hình 3: Các mảng công việc thiết kế hệ thống nhúng 21 Hình 4: Các yêu cầu kĩ tương ứng 24 Hình 1: Bảng mạch Encore 400 Ampro 26 Hình 2: Các thao tác ISA đơn giản 28 Hình 3: Ví dụ bảng mạch TV tương tự với thi hành điều khiển ISA 28 Hình 4: Board ví dụ với điện thoại di động thực kỹ thuật số ISA đường liệu 29 Hình 5: Board ví dụ với máy quay kỹ thuật số FSMD ISA 29 Hình 6: Ví dụ thực JVM ISA 30 Hình 7: Ví dụ thực CISC ISA 31 Hình 8: Ví dụ thực RISC ISA 31 Hình 9: Ví dụ thực SIMD ISA 32 Hình 10: Ví dụ thực siêu vơ hướng ISA 33 Hình 11: Ví dụ thực VLIW ISA 33 Hình 12: Sự phân cấp nhớ 36 Hình 13: Ví dụ DIP 37 Hình 14: Ví dụ SIMM 30 chân 37 Hình 15: Ví dụ DIMM 168 chân 37 Hình 16: Sơ đồ khối I/O kiến trúc Von Newman 38 Hình 17: Các cổng điều khiển thiết bị điều khiển bảng mạch nhúng 39 Hình 18: Bảng mạch I/O phức tạp 39 Hình 19: Bảng mạch I/O đơn giản 40 Hình 20: Ví dụ sơ đồ truyền đơn giản 41 Hình 21: Ví dụ sơ đồ truyền bán song công 41 Hình 22: Ví dụ sơ đồ truyền song công 41 Hình 23: Mơ hình OSI 42 Hình 24: Sơ đồ mạng nối tiếp 42 Hình 25: Sơ đồ khối thành phần nối tiếp 42 Hình 26: Các tín hiệu RS-232 đầu nối DB25 43 Hình 27: Các tín hiệu RS-232 đầu nối DB9 43 Hình 28: Các tín hiệu RS-232 đầu nối RJ45 44 Hình 29: Hệ thống I/O mẫu 44 Hình 30: Phương tiện truyền tin dùng dây 44 Hình 31: Phương tiện truyền tin khơng dây 45 Hình 32: Giao diện cổng truyền tin tới I/O bảng mạch khác 45 Hình 33: Cấu trúc bus chung 46 Hình 34: Kiến trúc MPC620 với cầu 47 Hình 35: Sự phân xử song song tập trung động 49 Hình 36: Sự phân xử tảng FIFO 49 Hình 37: Sự phân xử quyền ưu tiên 49 Hình 38: Sự phân xử tuần tự/chuỗi tập trung 50 Hình 39: Sự phân xử phân tán qua tự chọn 50 Hình 40: Bảng mạch mẫu TV 52 Hình 41: Các điều kiện START STOP I2C 53 Hình 42: Ví dụ truyền liệu I2C 53 Hình 43: Sơ đồ truyền liệu hoàn chỉnh I2C 54 Hình 44: Bus PCI 54 Hình 45: IC tương thích chuẩn PCI 55 Hình 46: Sơ đồ khung RS-232 58 Hình 47: Middleware mơ hình hệ nhúng 60 Hình 48: Mơ hình OSI middleware 61 Hình 49: Sơ đồ khối mơ hình OSI, TCP/IP mơ hình hệ nhúng 62 Hình 50: Sơ đồ khối mơ hình TCP/IP giao thức 62 Hình 51: Lớp ứng dụng mơ hình hệ nhúng 63 Hình 1: Kernel hệ thống 67 Hình 2: Cấu trúc tác vụ 70 Hình 3: Các trạng thái tác vụ 72 Hình 4: Cơ chế truyền tin mailbox 75 Hình 5: Cấu trúc thư mục FreeRTOS 79 Hình 1: Thiết kế (platform) 94 Hình 2: Sơ đồ trạng thái với ngoại lệ k 96 Hình 3: Tổng quan phân hoạch phần cứng/phần mềm 100 Hình 4: Hợp nút nhiệm vụ ánh xạ đến thành phần phần cứng 102 Hình 5: Đồ thị nhiệm vụ 106 Hình 6: Khơng gian thiết kế cho phịng thí nghiệm âm 109 Hình 7: Môi trường phát triển 110 Hình 8: IDE 111 Hình 9: Ví dụ trình mơ PSpice CAD 112 Hình 10: Ví dụ mạch PSpice CAD 112 Hình 11: Sơ đồ biên dịch 114 Hình 12: Các bước biên dịch/liên kết tập tin đối tượng kết quả, thực hiên C 115 Hình 13: Sơ đồ phiên dịch 116 Hình 14: Sơ đồ giải thích 128 Hình 15: Sơ đồ giải thích 128 Hình 16: Ma trận mơ hình thử nghiệm 130 Hình 1: Cấu trúc ghi trạng thái chương trình 134 Hình 2: Các ghi lõi ARM 135 Hình 3: Các chế độ hoạt động ghi 136 Hình 4: Dòng chảy lệnh tác vụ áp dụng trường hợp lệnh có nhiều chu kì máy 137 Hình 5: Sơ đồ nhớ ARM M3 150 Hình 6: hiệu năng, chức năng, hoạt động dòng vi điều khiển STM32 Cortex M 151 Hình 7: Vai trò CMSIS SPL phát triển phần mềm cho vi điều khiển ARM 156 Hình 8: Kiến trúc ngoại vi STM32 157 Hình 9: Thanh ghi RCC_AHBENR 158 Hình 10: RCC_APB2ENR 158 Hình 11: Thanh ghi RCC_APB1ENR 159 Hình 12: Cấu trúc chân điều khiển thông dụng 160 Hình 13: Cấu trúc chân IO hỗ trợ giao tiếp 5V 161 Hình 14: Thơng tin cấu hình IO 161 Hình 15: Các chế độ tốc độ đầu số 161 Hình 16: Thanh ghi GPIOx_CRL 162 Hình 17: Thanh ghi GPIOx_CRH 162 Hình 18: Thanh ghi GPIOx_IDR 163 Hình 19: Thanh ghi GPIOx_ODR 163 Hình 20: Thanh ghi Lập/Xóa GPIOx_BSRR 164 Hình 21: Thanh ghi Xóa GPIOx_BRR 164 Hình 22: Thanh ghi khóa cấu hình GPIOx_LCKR 164 Hình 23: Cấu hình package sử dụng cho Project với KeilC 169 Hình 24: Thơng tin gói sau cấu hình 171 Hình 25: Hoạt động Systick 175 Hình 26: Cấu trúc Timer Advanced-Control 180 Hình 27: Cấu trúc Timer General-purpose 181 Hình 28: Hoạt động Timer 182 Hình 29: Điều chế độ rộng xung PWM 186 Hình 30: Thơng tin cấu hình PWM cho Timer 189 Hình 31: Mức điện biểu diễn tín hiệu nhị phân 192 Hình 32: Cổng DB25 193 Hình 33: Cổng DB-9 193 Hình 34: Kết nối tối thiểu PC với vi điều khiển giao tiếp UART 194 Hình 35: Định dạng 8-N-1 194 Hình 36: Thơng tin chân giao tiếp UART 194 Hình 37: Cấu hình thơng tin chân giao tiếp UART 196 Hình 38: Kết nối giao tiếp SPI 201 Hình 39: Màn hình PCD8544 sử dụng giao tiếp SPI 207 Hình 40: Sơ đồ khối ADC 212 Hình 41: Sơ đồ khối DAC 216 Hình 42: Kiến trúc RTOS 220 Hình 43: Hoạt động CPU quan sát người dùng với Multi Thread 221 Hình 44: Các trạng thái Task RTOS 221 Hình 45: Cơ chế Round-Robin 222 Hình 46: Cơ chế Priority Base 222 Hình 47: Cơ chế Priority-based pre-emptive 223 Hình 48: Sử dụng Signal Event đồng thông tin Task 224 Hình 49: Trao đổi liệu Task sử dụng Queue 225 Hình 50: Trao đổi liệu Task sử dụng Mail Queue 225 Hình 51: Binary semaphore Counting semaphore 226 Hình 52: Sử dụng chung tài nguyên hệ thống với Mutex 227 Hình 53: Thêm FreeRTOS vào Project 227 DANH MỤC BẢNG BIỂU Bảng 1: Các xử lý kiến trúc thực tế 27 Bảng 1: So sánh FreeRTOS OpenRTOS 76 Bảng 1: Các giải pháp vấn đề IP trình bày 103 Bảng 2: Thời gian thực nhiệm vụ từ T1 đến T5 thành phần 107 Bảng 3: Những công cụ gỡ lỗi 125 Bảng 1: Bảng chân cổng DB-9 193 Bảng 2: Các thơng tin cấu hình giao tiếp SPI 203 Bảng 3: Thơng tin cấu hình chân giao tiếp SPI 204 Bảng 4: Các thơng tin cấu hình ADC 214 CHƯƠNG - GIỚI THIỆU CHUNG VỀ HỆ THỐNG NHÚNG 1.1 Khái niệm Hệ thống nhúng (Embedded system) Hệ thống nhúng (Embedded system) thuật ngữ để hệ thống có khả tự trị nhúng vào mơi trường hay hệ thống mẹ Đó hệ thống tích hợp phần cứng phần mềm phục vụ toán chuyên dụng nhiều lĩnh vực công nghiệp: điện tử, viễn thông, công nghệ thơng tin, tự động hố điều khiển, quan trắc truyền tin Đặc điểm hệ thống nhúng hoạt động ổn định có tính tự động hoá cao Hệ thống nhúng thường thiết kế để thực chức chuyên biệt Khác với máy tính đa chức năng, chẳng hạn máy tính cá nhân, hệ thống nhúng thực một vài chức định, thường kèm với yêu cầu cụ thể bao gồm số thiết bị máy móc phần cứng chun dụng mà ta khơng tìm thấy máy tính đa nói chung Vì hệ thống xây dựng cho số nhiệm vụ định nên nhà thiết kế tối ưu hóa nhằm giảm thiểu kích thước chi phí sản xuất Các hệ thống nhúng thường sản xuất hàng loạt với số lượng lớn Hệ thống nhúng đa dạng, phong phú chủng loại Đó thiết bị cầm tay nhỏ gọn đồng hồ kĩ thuật số máy chơi nhạc MP3, sản phẩm lớn đèn giao thơng, kiểm sốt nhà máy hệ thống kiểm soát máy lượng hạt nhân Xét độ phức tạp, hệ thống nhúng đơn giản với vi điều khiển phức tạp với nhiều đơn vị, thiết bị ngoại vi mạng lưới nằm gọn lớp vỏ máy lớn Các thiết bị PDA máy tính cầm tay có số đặc điểm tương tự với hệ thống nhúng hệ điều hành vi xử lý điều khiển chúng thiết bị hệ thống nhúng thật chúng thiết bị đa năng, cho phép sử dụng nhiều ứng dụng kết nối đến nhiều thiết bị ngoại vi Cho đến nay, khái niệm hệ thống nhúng nhiều người chấp nhận là: hệ thống thực số chức đặc biệt có sử dụng vi xử lý Khơng có hệ thống nhúng có phần mềm 10 if (y1>y2) { tmp=y1; y1=y2; y2=tmp; } drawVLine(x1, y1, y2-y1); } else if (abs(x2-x1)>abs(y2-y1)) { delta=(double(y2-y1)/double(x2-x1)); ty=double(y1); if (x1>x2) { for (int i=x1; i>=x2; i ) { setPixel(i, int(ty+0.5)); ty=ty-delta; } } else { for (int i=x1; iy2) { for (int i=y2+1; i>y1; i ) { setPixel(int(tx+0.5), i); tx=tx+delta; } } else { 262 for (int i=y1; iabs(y2-y1)) { delta=(double(y2-y1)/double(x2-x1)); ty=double(y1); if (x1>x2) { for (int i=x1; i>=x2; i ) { clrPixel(i, int(ty+0.5)); ty=ty-delta; } } else { for (int i=x1; iy2) { for (int i=y2+1; i>y1; i ) { clrPixel(int(tx+0.5), i); tx=tx+delta; 264 } } else { for (int i=y1; ix2) { tmp=x1; x1=x2; x2=tmp; } if (y1>y2) { tmp=y1; y1=y2; y2=tmp; } drawHLine(x1, drawHLine(x1, drawVLine(x1, drawVLine(x2, y1, y2, y1, y1, x2-x1); x2-x1); y2-y1); y2-y1+1); } void LCD5110::clrRect(int x1, int y1, int x2, int y2) { int tmp; if (x1>x2) { 265 tmp=x1; x1=x2; x2=tmp; } if (y1>y2) { tmp=y1; y1=y2; y2=tmp; } clrHLine(x1, clrHLine(x1, clrVLine(x1, clrVLine(x2, y1, y2, y1, y1, x2-x1); x2-x1); y2-y1); y2-y1+1); } void LCD5110::drawRoundRect(int x1, int y1, int x2, int y2) { int tmp; if (x1>x2) { tmp=x1; x1=x2; x2=tmp; } if (y1>y2) { tmp=y1; y1=y2; y2=tmp; } if ((x2-x1)>4 && (y2-y1)>4) { setPixel(x1+1,y1+1); setPixel(x2-1,y1+1); setPixel(x1+1,y2-1); setPixel(x2-1,y2-1); drawHLine(x1+2, y1, x2-x1-3); drawHLine(x1+2, y2, x2-x1-3); drawVLine(x1, y1+2, y2-y1-3); drawVLine(x2, y1+2, y2-y1-3); 266 } } void LCD5110::clrRoundRect(int x1, int y1, int x2, int y2) { int tmp; if (x1>x2) { tmp=x1; x1=x2; x2=tmp; } if (y1>y2) { tmp=y1; y1=y2; y2=tmp; } if ((x2-x1)>4 && (y2-y1)>4) { clrPixel(x1+1,y1+1); clrPixel(x2-1,y1+1); clrPixel(x1+1,y2-1); clrPixel(x2-1,y2-1); clrHLine(x1+2, y1, x2-x1-3); clrHLine(x1+2, y2, x2-x1-3); clrVLine(x1, y1+2, y2-y1-3); clrVLine(x2, y1+2, y2-y1-3); } } void LCD5110::drawCircle(int x, int y, int radius) { int f = - radius; int ddF_x = 1; int ddF_y = -2 * radius; int x1 = 0; int y1 = radius; char ch, cl; setPixel(x, y + radius); setPixel(x, y - radius); 267 setPixel(x + radius, y); setPixel(x - radius, y); while(x1 < y1) { if(f >= 0) { y1 ; ddF_y += 2; f += ddF_y; } x1++; ddF_x += 2; f += ddF_x; setPixel(x + x1, y setPixel(x - x1, y setPixel(x + x1, y setPixel(x - x1, y setPixel(x + y1, y setPixel(x - y1, y setPixel(x + y1, y setPixel(x - y1, y } + + + + - y1); y1); y1); y1); x1); x1); x1); x1); } void LCD5110::clrCircle(int x, int y, int radius) { int f = - radius; int ddF_x = 1; int ddF_y = -2 * radius; int x1 = 0; int y1 = radius; char ch, cl; clrPixel(x, y + radius); clrPixel(x, y - radius); clrPixel(x + radius, y); clrPixel(x - radius, y); while(x1 < y1) { if(f >= 0) { 268 y1 ; ddF_y += 2; f += ddF_y; } x1++; ddF_x += 2; f += ddF_x; clrPixel(x + clrPixel(x clrPixel(x + clrPixel(x clrPixel(x + clrPixel(x clrPixel(x + clrPixel(x - x1, x1, x1, x1, y1, y1, y1, y1, y y y y y y y y + + + + - y1); y1); y1); y1); x1); x1); x1); x1); } } void LCD5110::drawBitmap(int x, int y, uint8_t* bitmap, int sx, int sy) { int bit; byte data; for (int cy=0; cy