Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 118 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
118
Dung lượng
3,97 MB
Nội dung
ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ TRƯƠNG XUÂN THẮNG GIAO TIẾP VỚI VI ĐIỀU KHIỂN ARM LUẬN VĂN THẠC SĨ Hà Nội - 2011 ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ TRƯƠNG XUÂN THẮNG GIAO TIẾP VỚI VI ĐIỀU KHIỂN ARM Ngành: Công nghệ Điện tử - Viễn thông Chuyên ngành: Kỹ thuật điện tử Mã số: 60 52 70 LUẬN VĂN THẠC SĨ NGƯỜI HƯỚNG DẪN KHOA HỌC: PGS TS NGÔ DIÊN TẬP Hà Nội - 2011 -1MỤC LỤC MỞ ĐẦU PHẦN I - LÝ THUYẾT CHUNG .6 CHƢƠNG - CẤU TRÚC VI ĐIỀU KHIỂN ARM 1.1 Đơi nét lịch sử hình thành phát triển vi điều khiển ARM 1.2 Cấu trúc ARM 1.3 Mơ hình kiến trúc 1.4 Mơ hình thiết kế ARM .10 1.4.1 Lõi xử lý 10 1.4.2 Các ghi ARM 11 1.5 Cấu trúc load-store .12 1.6 Cấu trúc tập lệnh ARM .12 1.6.1 Thực thi lệnh có điều kiện 12 1.6.2 Phương thức định địa 12 1.6.3 Ngăn xếp .13 1.6.4 Tập lệnh ARM 13 1.7 Kết luận 16 CHƢƠNG - GIAO TIẾP VỚI VI ĐIỀU KHIỂN ARM .17 2.1 Mơ hình giao tiếp vi điều khiển ARM .17 2.2 Các giao tiếp vi điều khiển ARM 18 2.2.1 Giao tiếp với nhớ 18 2.2.2 Giao tiếp với điều khiển ngắt 21 2.2.3 Giao tiếp với định thời 25 2.2.4 Giao tiếp với điều khiển tạm dừng Reset 28 2.2.5 Giao tiếp với khối GIPO .30 2.2.6 Giao tiếp với khối truyền/thu không đồng đa (UART) 32 2.2.7 Giao tiếp ngoại vi nối tiếp (SPI) 34 2.2.8 Giao tiếp USB .35 2.2.9 Kiến trúc bus truyền liệu cao cấp vi điều khiển ARM 37 2.3 Kết luận 41 CHƢƠNG - ĐẶC ĐIỂM CÁC DÒNG LÕI XỬ LÝ ARM 43 3.1 Phân loại tính dịng lõi xử lý ARM 43 3.2 Đặc điểm dòng lõi xử lý ARM 45 3.2.1 Đặc điểm kiến trúc dòng lõi xử lý ARM v4T 45 3.2.2 Đặc điểm kiến trúc dòng lõi xử lý ARM v5 .46 3.2.3 Đặc điểm kiến trúc dòng lõi xử lý ARM v6 .47 3.2.4 Kiến trúc dòng lõi xử lý ARM v7 .48 3.3 Kết luận 49 -2PHẦN II - THỰC NGHIỆM 50 CHƢƠNG - ỨNG DỤNG MỘT SỐ GIAO TIẾP VỚI VI ĐIỀU KHIỂN AT91SAM7S64 50 4.1 Giới thiệu 50 4.2 Đặc tính vi điều khiển AT91SAM7S64 51 4.3 Khối nguồn cung cấp 53 4.4 Cổng kết nối chuẩn JTAG 55 4.5 Mạch cảm biến nhiệt độ .55 4.6 Giao tiếp với IC thời gian thực DS12C887 .58 4.7 Hiển thị liệu LED đoạn 69 4.8 Giao tiếp với SD Card 72 4.9 Giao tiếp với máy tính qua cổng COM 79 4.10 Sơ đồ nguyên lý mạch 82 4.11 Sơ đồ mặt mạch in 84 4.12 Sơ đồ mặt mạch in 84 4.13 Mạch hoàn chỉnh 85 4.14 Kết .85 4.15 Lưu đồ thuật toán .88 KẾT LUẬN 89 TÀI LIỆU THAM KHẢO .90 DANH MỤC BẢNG 91 DANH MỤC HÌNH 92 PHỤ LỤC 94 -3KÝ HIỆU CÁC CHỮ VIẾT TẮT ADC AMBA AHB AIC ASIC ASB API APB BRG CLK CMSIS CRC DMA DSP DRAM EEPROM EPROM FAT FIFO FIQ GIPO GSM IEM IRQ LCD LSB Analog to Digital Converter Advanced Microcontroller Bus Architecture Advanced High-performance Bus Advanced Interrupt Controller Application-Specific Integrated Circuit Advanced System Bus Application Programming Interface Advanced Peripheral Bus Baud Rate Generator Clock The Cortex Microcontroller Software Interface Standard Cyclic Redundancy Check Direct Memory Access Digital Signal Processors Dynamic Random Access Memory Electrically Erasable Programmable Read-Only Memory Erasable Programmable ReadOnly Memory File Allocation Table First In First Out Fast Interrupt Request General Purpose Input/Output Global System for Mobile Communications Intelligent Energy Management Bộ chuyển đổi tương tự sang số Kiến trúc bus truyền vi điều khiển cao cấp Bus truyền liệu hiệu suất cao Interrupt Request Liquid Crystal Display Least Significant Bit Yêu cầu ngắt Màn hình tinh thể lỏng Bit có giá trị thấp Bộ điều khiển ngắt cao cấp Mạch tích hợp chuyên dụng Hệ thống bus truyền đa Giao diện lập trình ứng dụng Bus truyền ngoại vi đa Bộ tạo tốc độ Baud Xung nhịp Chuẩn giao tiếp phần mềm vi điều khiển Cortex Kiểm tra độ dư vòng Sự truy cập nhớ trực tiếp Bộ xử lý tín hiệu số Bộ nhớ truy cập ngẫu nhiên động Bộ nhớ đọc xóa điện Bộ nhớ để đọc có khả lập trình lại Bảng phân bố tập tin Vào trước trước Yêu cầu ngắt nhanh Đầu vào đa mục đích Hệ thống truyền thơng di động tồn cầu Bộ quản lý mức tiêu thụ lượng thông minh -4MAC MSB PDA PLD PLL PMC PWM PHY RAM ROM RTC Rx SD Card SPI SRAM SSRAM Tx TIC UART USB VGA Multiply-Accumulate Unit Most Significant Bit Personal Digital Assistant Programmable Logic Device Phase Lock Loop Power Management Controller Pulse Width Modulation Physical Random Access Memory Read Only Memory Real Time Clock Receive Secure Digital Card Serial Peripheral Interface Static Random Access Memory Synchronous Static Random Access Memory Transmit Test Interface Controller Universal Asynchronous Receiver/Transmitter Universal Serial Bus Video Graphics Array Bộ tích lũy nhân Bit có giá trị cao Máy hỗ trợ cá nhân kỹ thuật số Bộ logic có khả lập trình Vịng khóa pha Bộ quản lý nguồn Bộ điều chế độ rộng xung Lớp vật lý Bộ nhớ truy nhập ngẫu nhiên Bộ nhớ đọc Đồng hồ thời gian thực Nhận liệu Thẻ nhớ liệu số Giao tiếp ngoại vi nối tiếp Bộ nhớ truy cập ngẫu nhiên tĩnh Bộ nhớ truy cập ngẫu nhiên đồng tĩnh Truyền liệu Bộ giao tiếp kiểm thử Bộ thu/phát không đồng đa Bus nối tiếp đa Mảng đồ họa hình ảnh -5- MỞ ĐẦU Xuất từ năm đầu thập niên 1960, hệ thống nhúng phát triển mạnh mẽ lĩnh vực kỹ thuật điện tử công nghệ thông tin, với ứng dụng rộng rãi công nghiệp đời sống Hệ thống nhúng địi hỏi phải có cấu trúc mạnh, đáp ứng thời gian thực tốt, dung lượng nhớ lớn, khả tính tốn nhanh, khả tiêu thụ lượng thấp, tính ổn định cao tích hợp sẵn nhiều ngoại vi Vi điều khiển ARM đánh giá dòng vi điều khiển mạnh, đáp ứng yêu cầu hệ thống nhúng ngày nay, sử dụng rộng rãi giới nghiên cứu phát triển Việt Nam Trong khn khổ đề tài, ta tìm hiểu mơ hình kiến trúc, giao tiếp với vi điều khiển ARM, đặc điểm chung dòng lõi xử lý thử nghiệm số ứng dụng giao tiếp với vi điều khiển AT91SAM7S64 có lõi xử lý ARM7TDMI -6- PHẦN I - LÝ THUYẾT CHUNG CHƢƠNG CẤU TRÚC VI ĐIỀU KHIỂN ARM Để thực giao tiếp với vi điều khiển ARM yêu cầu trước hết đặt phải hiểu rõ cấu trúc đặc điểm vi điều khiển [5] [6] 1.1 Đôi nét lịch sử hình thành phát triển vi điều khiển ARM Việc thiết kế ARM năm 1983 dự án phát triển cơng ty máy tính Acorn Nhóm thiết kế, dẫn đầu Roger Wilson Steve Furber, bắt đầu phát triển vi xử lý có nhiều điểm tương đồng với kỹ thuật MOS 6502 tiên tiến Acorn sản xuất nhiều máy tính dựa 6502, việc tạo chip bước tiến đáng kể cơng ty Nhóm thiết kế hồn thành việc phát triển mẫu gọi ARM1 vào năm 1985, vào năm sau, nhóm hồn thành sản phẩm ARM2 ARM2 có đường truyền liệu 32 bit, không gian địa 26 bit tức cho phép quản lý đến 64 Mbyte địa 16 ghi 32 bit Một ghi đóng vai trị đếm chương trình với bit có giá trị cao bit có giá trị thấp lưu giữ cờ trạng thái vi xử lý Thế hệ sau, ARM3 tạo với 4KB nhớ đệm có chức cải thiện tốt Vào năm cuối thập niên 80, hãng máy tính Apple Computer bắt đầu hợp tác với Acorn để phát triển hệ lõi ARM Công việc trở nên quan trọng Acorn nâng nhóm thiết kế trở thành công ty gọi Advanced RISC Machines Từ lý hình thành chữ viết tắt ARM Advanced RISC Machines thay Acorn RISC Machine Về sau, Advanced RISC Machines trở thành công ty ARM Limited Kết hợp tác ARM6 Mẫu công bố vào năm 1991 Apple sử dụng vi xử lý ARM 610 dựa ARM6 làm sở cho PDA hiệu Apple Newton Vào năm 1994, Acorn dùng ARM 610 làm CPU máy vi tính RiscPC họ Trải qua nhiều hệ lõi ARM gần không thay đổi kích thước ARM2 có 30.000 transistors ARM6 tăng lên đến 35.000 Ý tưởng nhà sản xuất lõi ARM cho người sử dụng ghép lõi ARM với số phận tùy chọn để tạo CPU hồn chỉnh, loại CPU mà tạo nhà máy sản xuất bán dẫn cũ tiếp tục tạo sản phẩm với nhiều tính mà giá thành thấp Thế hệ thành công hãng lõi xử lý ARM7TDMI, với hàng trăm triệu lõi sử dụng máy điện thoại di động, hệ thống video game cầm tay -7ARM thành thương hiệu đứng đầu giới ứng dụng sản phẩm nhúng địi hỏi tính cao, sử dụng lượng giá thành thấp Chính nhờ trội thị phần thúc đẩy ARM liên tục phát triển cho nhiều phiên Những thành công quan trọng việc phát triển ARM: - Giới thiệu ý tưởng định dạng tập lệnh nén lại (Thumb) cho phép tiết kiệm lượng giảm giá thành hệ thống nhỏ - Giới thiệu họ điều khiển ARM - Phát triển môi trường làm việc ảo ARM máy tính - Các ứng dụng cho hệ thống nhúng dựa lõi xử lý ARM ngày trở nên rộng rãi Hầu hết nguyên lý hệ thống chip cách thiết kế xử lý đại sử dụng ARM, ARM đưa số khái niệm giải nén động dòng lệnh Việc sử dụng ba trạng thái nhận lệnh – giải mã – thực thi chu kỳ máy mang tính quy phạm để thiết kế hệ thống xử lý thực Do đó, lõi xử lý ARM sử dụng rộng rãi hệ thống phức tạp 1.2 Cấu trúc ARM - Cấu trúc load-store (nạp-lưu trữ) - Cho phép truy xuất liệu không thẳng hàng - Tập lệnh trực giao - Tập lệnh ARM-32bit - Hầu hết lệnh thực vòng chu kỳ đơn Trong ARM có số tính chất sau: - Hầu hết tất lệnh cho phép thực thi có điều kiện, điều làm giảm việc phải viết tiêu đề rẽ nhánh bù cho việc khơng có dự đốn rẽ nhánh - Trong lệnh số học, để điều kiện thực hiện, người lập trình cần sửa mã điều kiện - Có ghi dịch 32 bit mà sử dụng đầy đủ chức với hầu hết lệnh số học việc tính tốn địa - Có kiểu định địa theo số mạnh - Có hệ thống thực ngắt hai mức ưu tiên đơn giản nhanh, kèm theo cho phép chuyển nhóm ghi 1.3 Mơ hình kiến trúc Các thành phần nhúng với lõi xử lý ARM mô tả hình 1.1 Đây kiến trúc chung họ xử lý với lõi ARM -8- Hình 1.1: Mơ hình kiến trúc lõi xử lý ARM Lõi xử lý ARM khối chức kết nối bus liệu, mũi tên thể cho dòng chảy liệu, đường thể cho bus liệu, ô biểu diễn hình khối hoạt động vùng lưu trữ Cấu hình cho thấy dịng liệu thành phần tạo nên xử lý ARM Dữ liệu vào lõi xử lý thông qua bus liệu Các liệu hướng để thực trường liệu Hình 1.1 cho thấy ưu điểm kiến trúc Harvard ARM sử dụng hai bus truyền khác (bus liệu bus lệnh tách riêng), kiến trúc Von Neumann chia sẻ liệu bus Các giải mã định hướng dịch chuyển trước chúng thực thi Mỗi lệnh thực thuộc tập lệnh riêng biệt Bộ xử lý ARM, giống tất xử lý RISC, sử dụng kiến trúc load-store Điều có nghĩa có hai loại lệnh để chuyển liệu vào xử lý: lệnh load cho phép chép liệu từ nhớ vào ghi lõi xử lý, ngược lại lệnh store cho phép chép liệu từ ghi tới nhớ Khơng có lệnh xử lý liệu trực tiếp nhớ Do đó, việc xử lý liệu thực ghi Tất liệu thao tác nằm ghi, ghi tốn hạng nguồn, tốn hạng đích, trỏ nhớ Các liệu bit, 16 bit mở rộng thành 32 bit trước đưa vào ghi - 102 if (fs->fs_type == FS_FAT32) { scan->clust = scan->sclust = clust; scan->sect = clust2sect(clust); } else { scan->clust = scan->sclust = 0; scan->sect = clust; } scan->index = 0; while ((*path == ' ') || (*path == '/')) path ; /* Skip leading spaces */ if ((BYTE)*path < ' ') { /* Null path means the root directory */ *dir = NULL; return FR_OK; } for (;;) { ds = make_dirfile(&path, fn); /* Get a paragraph into fn[] */ if (ds == 1) return FR_INVALID_NAME; for (;;) { if (!move_window(scan->sect)) return FR_RW_ERROR; dptr = &(fs->win[(scan->index & 15) * 32]);/* Pointer to the directory entry */ if (*dptr == 0) /* Has it reached to end of dir? */ return !ds ? FR_NO_FILE : FR_NO_PATH; if ( (*dptr != 0xE5) /* Matched? */ && !(*(dptr-11) & AM_VOL) && !memcmp(dptr, fn, 8-3) ) break; if (!next_dir_entry(scan)) /* Next directory pointer */ return !ds ? FR_NO_FILE : FR_NO_PATH; } if (!ds) { *dir = dptr; return FR_OK; } /* Matched with end of path */ if (!(*(dptr-11) & AM_DIR)) return FR_NO_PATH; /* Cannot trace because it is a file */ clust = ((DWORD)LD_WORD(dptr-20) clust = scan->sclust = clust; //Restart scan with the new directory scan->sect = clust2sect(clust); scan->index = 0; } } /* Reserve a Directory Entry */ #ifndef _FS_READONLY static BYTE* reserve_direntry ( DIR *scan /* Target directory to create new entry */ ) { DWORD clust, sector; BYTE c, n, *dptr; FATFS *fs = FatFs; /* Re-initialize directory object */ - 103 clust = scan->sclust; if (clust) { /* Dyanmic directory table */ scan->clust = clust; scan->sect = clust2sect(clust); } else { /* Static directory table */ scan->sect = fs->dirbase; } scan->index = 0; { if (!move_window(scan->sect)) return NULL; dptr = &(fs->win[(scan->index & 15) * 32]); //Pointer to the directory entry c = *dptr; if ((c == 0) || (c == 0xE5)) return dptr; /* Found an empty entry! */ } while (next_dir_entry(scan)); /* Next directory pointer */ /* Reached to end of the directory table */ /* Abort when static table or could not stretch dynamic table */ if ((!clust) || !(clust = create_chain(scan->clust))) return NULL; if (!move_window(0)) return 0; fs->winsect = sector = clust2sect(clust); /* Cleanup the expanded table */ memset(fs->win, 0, 512); for (n = fs->sects_clust; n; n ) { if (disk_write(fs->win, sector, 1) != RES_OK) return NULL; sector ; } fs->winflag = 1; return fs->win; } #endif /* _FS_READONLY */ /* Make Sure that the File System is Valid */ static FRESULT check_mounted () { FATFS *fs = FatFs; if (!fs) return FR_NOT_ENABLED; /* Has the FatFs been enabled? */ if (disk_status() & STA_NOINIT) { /* The drive has not been initialized */ if (fs->files) /* Drive was uninitialized with any file left opend */ return FR_INCORRECT_DISK_CHANGE; else return f_mountdrv(); /* Initialize file system and return resulut */ } else { /* The drive has been initialized */ if (!fs->fs_type) /* But the file system has not been initialized */ return f_mountdrv(); /* Initialize file system and return resulut */ } return FR_OK; /* File system is valid */ } /* Public Funciotns - 104 Load File System Information and Initialize FatFs Module */ Module thời gian thực #ifndef RT12C887A_H #define RT12C887A_H #include "Board.h" //Dallas DS12C887A connection #define RT_DS (1