Giáo trình Lập trình hệ thống nhúng sử dụng vi điều khiển MSP430 (Embedded System I)

pdf 120 trang phuongnguyen 3790
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Lập trình hệ thống nhúng sử dụng vi điều khiển MSP430 (Embedded System I)", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfgiao_trinh_lap_trinh_he_thong_nhung_su_dung_vi_dieu_khien_ms.pdf

Nội dung text: Giáo trình Lập trình hệ thống nhúng sử dụng vi điều khiển MSP430 (Embedded System I)

  1. Lập trình hệ thống nhúng sử dụng vi điều khiển MSP430 (Embedded System I) Ts. Lê Mạnh Hải Khoa CNTT, ĐH Cơng nghệ TP HCM 11/2013 1
  2. Mở đầu I Mục đích mơn học: • Cung cấp kiến thức về lập trình vi điều khiển TI MSP430. II. Thời gian: • 30 tiết lý thuyết (2 tín chỉ) + 30 tiết thực hành (1 tín chỉ) III Giáo trình và tài liệu tham khảo • MSP430 Microcontroller Basics. John H. Davies. Elsevier. 2008 (685 trang) • Embedded Systems Design using the TI MSP430 Series. Chris Nagy. Elsevier. 2003 (296trang) • Introduction to Embedded Systems - A Cyber-Physical Systems Approach, E. A. Lee and S. A. Seshia. 2011 2
  3. IV. Đánh giá: •Thi kết thúc mơn: Bài tự luận với 3 câu hỏi. V. Giáo viên: • Ts. Lê Mạnh Hải. Tel: 0985399000. • Khơng gọi điện thoại để hỏi hay xin điểm, email: hailemanh@yahoo.com, lm.hai@hutech.edu.vn • Website: giangvien.hutech.edu.vn • GV thực hành: Nguyễn Ngọc Đức. 0978629557 4
  4. Nội dung chi tiết Chương 1: Các hệ thống nhúng và vi điều khiển MSP430 Chương 2: Phát triển ứng dụng nhúng. Chương 3: Các hàm và ngắt Chương 4: Nhập/xuất Chương 5: Bộ định thời Chương 6: ADC Chương 7: Kết nối 5
  5. Chương 1: Các hệ thống nhúng và vi điều khiển MSP430 Sau khi học bài này, sinh viên sẽ nắm được 1. Hệ thống nhúng là gì? 2. Các hướng phát triểnhệ thống nhúng 3. Cấutrúcđiểnhìnhmộtvi điều khiển 4. Cấutrúcvi điều khiển MSP430G2553 6
  6. Hệ thống nhúng là gì? • Theo vi.wikipedia.org: Hệ thống nhúng (Embedded system) là mộtthuậtngữđểchỉ mộthệ thống cĩ khả năng tự trị (máy tính) được nhúng vào trong một mơi trường hay mộthệ thống mẹ. • Đĩ là các hệ thống tích hợpcả phầncứng và phần mềmphụcvụ các bài tốn chuyên dụng trong nhiều lĩnh vực cơng nghiệp, tựđộng hố điềukhiển, quan trắcvàtruyền tin. Đặc điểmcủacáchệ thống nhúng là hoạt động ổn định và cĩ tính năng tựđộng hố cao. 7
  7. Hệ thống nhúng là gì? •Máy giặt •Xe hơi đời mới cĩ trên 100 bộ xử lý •Khoảng 99% chíp tính tốn được ứng dụng trong các hệ thống nhúng 8
  8. • Điệnthoạidi động thơng minh (smartphone) •TV 10
  9. Bo Launchpad MSP430 IAR Kickstart or MSP430G2543 Code Composer MSP430G2553 Studio Ver 5 (CCS) MSP-EXP430G2 LaunchPad Experimenter Board 11
  10. Các hướng phát triển hệ thống nhúng •Một hệ thống điều khiển tương tự (trước năm 1970) •Hệ thống máy tính số: Vi xử lý và vi điều khiển (1970 – nay) 12
  11. • Mạch số tích hợp thấp: transitor, IC 555 • Mạch số tích hợp trung bình : CMOS 4000 • Mạch số tích hợp cao: Vi điều khiển 13
  12. Các hướng ứng dụng • Application-specific integrated circuits (ASICs) – Chíp (IC) thiết kế dành riêng cho một ứng dụng • Field-programmable gate arrays (FPGAs) and programmable logic devices (PLDs) – Chíp thiết kế cĩ thể lập trình thay đổi cấu tạo chức năng bằng cách tạo các mối liên kết giữa các cổng bên trong chíp. Cĩ hàng triệu cổng trong một chíp. • Microcontrollers –Cĩ một số khối rất hay được sử dụng cùng với một khối xử lý trung tâm (CPU) . 14
  13. Vi điều khiển nhỏ •CPU xử lý 8 hoặc 16 bít •Bộ nhớ 64 KB •Tốc độ tối đa : 16Mhz •Chức năng chính: điều khiển, khơng phải tính tốn! • 15
  14. Cấu trúc chung của vi điều khiển 16
  15. Vi điều khiển cĩ 6 thành phần cơ bản sau: 1. Khối xử lý trung tâm (CPU) bao gồm: –Khối tính tốn số học/logic(ALU). –Khối giải mã lệnh và các mạch hỗ trợ xử lý ngắt, tái khởi động – Các thanh ghi bao gồm thanh ghi đếm chương trình PC, con trỏ ngăn xếp SP, thang ghi trạng thái (SR), thanh ghi tạo hằng số CG và 12 thanh ghi đa năng 17
  16. 2. Bộ nhớ chương trình: Là bộ nhớ khơng mất dữ liệu khi mất điện. Trước kia là ROM, nay sử dụng FLASH. Chíp MSP430G2553 chỉ cĩ 16KB 3. Bộ nhớ dữ liệu: RAM truy xuất tùy ý nhưng dữ liệu bị xĩa khi mất điện – Hiện đã cĩ bộ nhớ dữ liệu khơng bị xĩa khi mất điện 4. Các cổng nhập/xuất: Kết nối với các hệ thống khác 5. Đường BUS dữ liệu và BUS địa chỉ: Để truyền dữ liệu và lệnh giữa các khối. 6. Khối xung nhịp: Tạo xung đồng bộ các khối 18
  17. 08 khối thường gặp khác: Khối định thời (Timer): Đếm thời gian chính xác. Các vi điều khiển hiện nay cĩ ít nhất 2 khối này. Khối định thời cảnh báo: Là khối kiểm sốt lỗi chương trình theo thời gian. Khối này sẽ tái khởi động chíp khi chương trình bị lỗi . Khối giao tiếp tuần tự: Kết nối với các IC khác bằng cách truyền từng bít. Khối nhớ dữ liệu khơng bay hơi: Lưu trữ dữ liệu ngay cả khi mất điện. Thường dùng để lưu cấu hình thiết bị như địa chỉ IP trong các ADSL router Khối biến đổi tương tự -số : Cho phép chuyển đổi tín hiệu tương tự sang dạng số. Khối biến đổi số -tương tự : Cho phép chuyển đổi tín hiệu tương tự sang dạng số, thường dùng để điều khiển động cơ bằng phương pháp xung số (PWM). Đồng hồ thời gian thực: Lưu giữ giá trị năm tháng ngày. Bộ nạp và chạy chương trình: Cho phép nạp chương trình từ máy tính vào bộ nhớ chương trình 19
  18. Cấu trúc Harvard và von Neumann MSP 430 cĩ cấu trúc von Neumann 20
  19. Câu hỏi •Hãy kể tên một vài thiết bị dân dụng là hệ thống nhúng? • Các thành phần cơ bản của một vi điều khiển? • Các khối hỗ trợ thường gặp ở một VĐK? •Sự khác biệt giữa cấu trúc Harvard và von Neumann ? 21
  20. Bài 2: Cấu trúc vi điều khiển MSP430G2553 • Các chân VĐK MSP430G2553 • Các khối chức năng • Tổ chức bộ nhớ • Khối xử lý trung tâm (CPU) • Bộ tạo xung nhịp • Ngắt và tái khởi động • Các tài liệu chính thống 22
  21. Các chân VĐK MSP430G2553 • Chân ra: 20 chân từ vỏ nhựa PDIP •Phần lớn các chân cĩ nhiều chức năng. –Ví dụ chân số 3 cĩ 5 chức năng • Các ứng dụng tại mỗi thời điểm chỉ yêu cầu mỗi chân thực hiện một chức năng => khơng bị mâu thuẫn 23
  22. Mơ tả các chân • VCC( chân 1) VSS (chân 20) dùng để cấp nguồn 3,3V cho chíp. Nguồn cĩ thể dao động trong khoảng 1,8V – 3,6 V • P1.0–P1.7, P2.0, and P2.7 là 2 cổng nhập xuất số. Mỗi cổng 8 chân (8 bít), gọi tắt là P1 và P2. • Các khối chức năng cũng sử dụng các chân này khi cần nhờ cấu hình thanh ghi chọn khối P1SEL và P2SEL. 25
  23. Các khối chức năng MSP430G2553 26
  24. Mơ tả các khối chức năng • Các khốicơ bản: CPU, Xung nhịp, Flash, RAM, Ports,và Bus. •Cáckhốibổ xung: –Khốinạpchương trình: JTAG : 4 dây và 2 dây –Khốibiến đổitương tự -số ADC. –Khốibảovệ sụt áp (Brownout Protection) –Khối so sánh áp (Compare A+) –Khối Đồng hồ canh gác (WDT) – 2 khối định thờiloại A (Timer0_A3 và Timer_A3) – 2 khốigiaotiếptuầntự (USCI A0 và USCI B0) 27
  25. Bộ nhớ •Bộ nhớ là các thanh ghi 8 bít, tổ chức thành các ơ nhớ, • Địa chỉ ơ nhớ 16 bit từ 0x0000 tới 0xFFFF • Bus dữ liệu 16 bit cĩ thể truyền 16 bít hoặc 8 bít. 28
  26. Bus địa chỉ và các ơ nhớ 29
  27. Thứ tự ơ nhớ • Little-endian ordering: Khi dữ liệu cĩ trên 1 byte thì byte giá trị thấp nằm ở vị trí dưới, byte giá trị cao nằm ở bên trên trong bộ nhớ. Dịng MSP430 cĩ thứ tự này. • Big-endian ordering: Byte giá trị thấp nằm ở vị trí cao. Một số chíp của Motorola, Freescale HCS08 cĩ cấu trúc này. 30
  28. Tổ chức bộ nhớ Tổ chứcbộ nhớ của MSP430G2553 gồm các thành phầnsau • Thanh ghi chứcnăng chuyên dụng: Các thanh ghi của các khốicĩchứcnăng xác định trước. Ví dụ các thanh ghi PC, SP, SR, CG của CPU, thanh ghi P1REN, P1DIR của P1 • Các thanh ghi đanăng của CPU và các thiếtbị ngoạivi, như các thanh ghi R4-R15 của CPU, P1IN, P1OUT củaP1. – Các thanh ghi 8 bít – Các thanh ghi 16 bít • Random access memory (RAM): Các thanh ghi đặt trong khốiRAM cĩđịachỉ từ 0x0200 và chỉ cĩ 256/512 Bytes • Bootstrap loader : Là phầnbộ nhớ khơng bị xĩa chứachương trình kếtnối máy tính qua cổng COM củaTI 31
  29. • Bộ nhớ dữ liệu khơng bay hơi (Information memory): Là 256 Byte flash, cho phép lưu các thơng tin quan trọng và khơng bị mất khi mất điện. • Bộ nhớ chương trình (Code memory): Là bộ nhớ chỉ đọc (ROM) và chứa chương trình được nạp từ máy tính xuống. Sau khi nạp và khởi động, chương trình này sẽ được đọc vào CPU để thực thi . Chíp hiện nay cĩ từ 2KB-16KB. • Interrupt and reset vectors: Là phần bộ nhớ chứa các địa chỉ của các hàm xử lý ngắt và tái khởi động. 32
  30. Khối xử lý trung tâm (CPU) •Chức năng: Khối CPU thực thi các lệnh cất trong bộ nhớ chương trình. Các lệnh được đọc tuần tự và thực thi nếu khơng gặp các lệnh rẽ nhánh hoặc xử lý ngắt •Cấu tạo: Gồm một khối tính tốn ALU 16 bít, mạch giải mã lệnh và 16 thanh ghi. •Tần số tối đa (cũng là tốc độ) do xung nhịp MCLK tạo là 16MHz. • 34
  31. CPU 35
  32. Các thanh ghi của CPU • Thanh ghi đếm chương trình (Program counter – PC): Chứa địa chỉ lệnh kế tiếp cần thực hiện. PC tự động tăng 2 sau mỗi xung nhịp, ngoại trừ cĩ lệnh rẽ nhánh hoặc gọi hàm • Con trỏ ngăn xếp (Stack pointer- SP): Trỏ đến vùng nhớ RAM dùng làm ngăn xếp. Khi một hàm được gọi, PC và SR được cất vào ngăn xếp và khi thực hiện xong hàm, các giá trị này được trả lại PC và SR để tiếp tục oc6ng việc đang thực hiện dở • Thanh ghi trạng thái (Status register – SR): Chứa các cờ trang thái. Các bít trạng thái hay được dùng là C, Z, N, và V. Ngồi ra cĩ một số bít để tắt xung nhịp như CPUOFF (tắt MCLK) • Thanh ghi hằng số (Constant generator) Dùng để tạo ra một số hằng số thường gặp • 12 thanh ghi đa năng : là các thanh ghi dùng để lưu thơng tin trung gian. Các thanh ghi cĩ tốc độ tru cập tương đương CPU 37
  33. Bộ tạo xung nhịp • Xung nhịp là thiết bị khơng thể thiếu của các hệ thống số • Linh kiện thường dùng để tạo xung nhịp là thạch anh cĩ thể tạo dao động khoảng vài MHz cho chíp (max = 16MHz) • Tuy nhiên khi chạy tốc độ cao, chíp tiêu tốn nhiều điện. Các hệ thống di động cần tiết kiệm pin nên một số bộ phận chỉ chạy ở tần số thấp sẽ tiết kiệm và tăng thời gian sử dụng pin. Bộ tạo xung nhịp cần đa dạng hĩa các chế độ hoạt động của VĐK. •Nhiều ứng dụng nhúng phần lớn thới gian ở trạng thái ngủ (cơng suất thấp)-> Cần tắt xung nhịp khi cĩ thể. Khi cĩ sự kiện ngắt, CPU sẽ được cấp xung đồng bộ lại để hoạt động. •. 38
  34. Bộ tạo xung nhịp 39
  35. Bộ tạo xung thấp tần bằng thạch anh LFXT1: Cĩ thể tạo các xung nhịp từ vài chục KHz tới 1 MHz với độ chính xác cao. Bộ tạo xung cao tần bằng thạch anh- XT2: Giống LFXT1 ngoại trừ tần số cao hơn (8-16MHz) Bộ tạo xung tần số thấp VLO với độ chính xác thấp. Các VĐK cĩ thể tạo xung nhịp tần số thấp mà khơng cần thạch anh. Dùng VLO nếu cần tiết kiệm năng lượng (kéo dài thời gian sử dụng giữa hai lần sạc pin) Bộ tạo xung điều khiển kỹ thuật số (DCO): Tạo các xung nhịp tần số cao (8-10MHz) mà khơng dùng thạch anh. Các VĐK sử dụng DCO trong giai đoạn đầu khi khởi động (khoảng 1 giây) . 40
  36. • Kiểm sốt các xung nhịp thơng qua thanh ghi trạng thái (SR) • CPUOFF khĩa MCLK, và dừng CPU cũng như các khối nào dùng MCLK để đồng bộ • SCG1 khĩa SMCLK và các khối dùng MCLK để đồng bộ • SCG0 khĩa DCO • OSCOFF khĩa VLO và LFXT1. 41
  37. Các loại xung nhịp • Master clock, MCLK, sử dụng cho CPU và một sơ khối tốc độ cao (1-16MHz). • Subsystem master clock, SMCLK, dùng cho các các khối tốc độ trung bình (1MHz) • Auxiliary clock, ACLK, Dùng cho các khối tốc độ thấp (32KHz). 42
  38. Khái niệm Ngắt và tái khởi động • Ngắt (Interrupts): Là một sự kiện gây bởi phần cứng , mặc dù được cài đặt bằng phần mềm) và thường cần được xử lý ngay lập tức. Khi xảy ra một ngắt, VĐK dừng chương trình đang thực thi, cất các thơng tin/ trang thái hiện tại (PC, SR) để chuyển sang chương trình xử lý ngắt (ISR) ngay lập tức. Sau khi xử lý ngắt xong, VĐK quay lại thực hiện tiếp cơng việc đang thực hiện trước. Như vậy chương trình xử lý ngắt được gọi bởi phần cứng chứ khơng phải phần mềm. • Tái khởi động (Resets): Được tạo bởi phần cứng, thường được dùng khi cĩ sự kiện bất thường ngu hại khiến VĐK khơng thể tiếp tục cơng việc. Thơng thường đồng hồ canh gác sẽ tái khởi động VĐK sau một khoảng thời gian nhất định nếu khơng được can thiệp kịp thời. Tái khởi động giúp hệ thống ở vào trạng thái ổn định 43
  39. Câu hỏi •Liệt kê các thanh ghi CPU • Các nguồn xung và các loại xung của VĐK TI MSP430G2553? •Ngắt là gì, tại sao hệ thống nhúng cần cơ chế ngắt? 44
  40. Bài tiếp • Mơi trường phát triển ứng dụng • Chương trình đơn giản đầu tiên 45
  41. Bài 3: Mơi trường phát triển ứng ứng dụng Sau khi học xong SV cầnnắm được: 1. Các cơng cụ hỗ trợ phát triển ứng dụng 2. Ngơn ngữ lập trình nhúng C 3. Truy cậpvàgỡ rối 4. Bo Launchpad MSP430 và các chương trình bậttắt đèn LED 46
  42. Các cơng cụ phát triển ứng dụng • Bộ soạn CT (Editor): Cho phép viết CT và kiểm tra cú pháp tức thì • Biên dịch (compiler): Chương trình chuyển mã C sang mã máy, cĩ khả năng dị lỗi • Gắn địa chỉ (Linker): Phối hợp các thư viện và các hàm, gán địa chỉ bộ nhớ (để khi nạp vào VĐK khơng bị nhầm) • Bộ mơ phỏng (Stand-alone simulator): Chương trình phỏng tạo hoạt động của VĐK, thay cho chíp thật. • Embedded emulator/debugger: Thiết bị cho phép nạp từng lệnh từ máy tính xuống VĐK để gỡ rối • Bộ nạp trực tiếp (In-circuit emulator): Thiết bị gỡ rối cho phép VĐK chay từng lệnh từ trên máy tính. Giá khoảng 1000$ • Chương trình nạp (Flash programmer): Là phần mềm miễn phí của TI dùng để nạp chương trình từ máy tính vào bộ nhớ chương trình của VĐK. 47
  43. • Các phầnmềm thơng dụng – IAR EmbeddedWorkbench. Phầnmềmmiễn phí cho SV. – Code Composer Studio – Phầnmềmmiễn phí cho SV : 16KB chương trình 48
  44. The C Programming Language if ((P1IN & BIT3) == 0) // Kiểm tra chân số 3 Port1 cĩ bằng 0? { P1OUT = 0x01; //cấp ra port 1 giá trị 0b00000001 } else { P1OUT = 0x00; //cấp ra port 1 giá trị 0b00000000 } 49
  45. Hợp ngữ Ví dụ: mov.w #WDTPW|WDTHOLD ,& WDTCTL Sinh viên sẽ học lập trình hợp ngữ nếu đã thành thạo lập trình bằng C 50
  46. Bo thực hành Mạch nạp VĐK Cơng tắc Cơng S1 tắcS2 2 LED The TI MSP430G2553 Launchpad Board. 51
  47. Các chương trình mở đầu • Bật /tắt các đèn LED • Đọc trạng thái cơng tắc S2 • Tự động bật tắt đèn dùng hàm giữ chậm • Automatic Control: Use of Subroutines • Automatic Control: Flashing a Light by Polling Timer_A • Header Files and Issues Brushed under the Carpet 52
  48. Bật tắt các đèn LED #include // Specific device void main (void) { WDTCTL = WDTPW | WDTHOLD; // dừng watchdog timer P1DIR = 0x41; // đặt các chân P1.0 và P1.6 là OUTPUT:0b01000001 P1OUT = 0x41; // cả hai led cùng sáng for (;;) { // Loop forever } // doing nothing } Hãy sửa lại chuong trình để Led 1 sáng , led 2 tắt 55
  49. Đọc trạng thái cơng tắc Nếu cơng tắc S2 hở (mở) – điện áp chân P1.3 sẽ lên 1 (3,3v ) Nếu cơng tắcS2 đĩng : điện áp trên P1.3 sẽ xuống 0 (0v) 56
  50. #include // Specific device #define LED1 BIT0 #define LED2 BIT6 #define S2 BIT3 void main (void) { WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer P1DIR = LED1|LED2; // Set pin with LED1 and LED2 to output P1OUT = LED1|LED2; // bat LED1 va LED2 sang P1REN |= S2; //su dung dien tro keo len/xuong, chi dung voi Launchpad v1.5 P1OUT |= S2; //dien tro keo len, sau lenh nay, S2 thuong xuyen cao (1) while(1) { // Loop forever if ((P1IN & S2) == 0) P1OUT |= LED1; // Yes: bat LED1 else P1OUT &= ~ LED1; // No: tắt LED1, LED2 khơng thay doi } } Hãy viết CT bật tắt LED2 bằng cơng tắc S2. LED1 khơng thay đổi 57
  51. Chớp đèn bằng hàm Delay() •Chương trình tiếp theo sẽ chớp đèn LED1 (sáng/tắt) với chu kỳ 1 giây. Như vậy thời gian sáng/tắt là 0,5 s 58
  52. while(1){ // Loop forever for (LoopCtr = 0; LoopCtr < DELAYLOOPS; ++ LoopCtr) { } // Empty delay loop P1OUT ˆ= LED1|LED2; // Toggle LEDs } } 59
  53. Tự động chớp đèn: Sử dụng timerA •Sử dụng vịng lặp là giải pháp đơn giản nhưng khơng chính xác: khi xảy ra một sự kiện ngắt, vịng lặp sẽ bị kéo dài. • Đoạn chương trình sau sẽ bật tắt đèn theo timer. • Timer sẽ được trình bày ở phần sau 60
  54. TimerA 61
  55. #include "msp430g2553.h" //2542 #define S2 BIT3 void main(void) { WDTCTL = WDTPW |WDTHOLD; P1DIR = BIT0|BIT6; P1OUT = 0x00; CCTL0 = CCIE; // CCR0 interrupt enabled CCR0 = 30000; TACTL = TASSEL_2 + MC_2 + ID_2; // SMCLK, upmode _BIS_SR( GIE); // Enter LPM0 w/ interrupt while(1){} } #pragma vector=TIMER0_A0_VECTOR __interrupt void Timer_A (void) { P1OUT ^=BIT0 | BIT6; CCR0 += 30000; 62 }
  56. Quizzes • Các phương pháp chớp một đèn LED? 63
  57. Chương tiếp theo • Hàm, ngắt và các chế độ tiết kiệm năng lượng 64
  58. Bài 4: Hàm, ngắt và chế độ tiết kiệm năng lượng 1. Hàm và các bước thực thi khi gọi hàm 2. Ngắt và chương trình phục vụ ngắt 3. Các bước thực thi khi xảy ra một ngắt 4. Các chế độ tiết kiệm năng lượng 65
  59. Hàm • Hàm là cách viết chương trình thành các mơ đun nhỏ. Việc tạo chương trình từ các mơ đun khiến chương trình trở nên rõ ràng, dễ viết, dễ kiểm thử và cĩ thể dùng nhiều lần •Một khi hàm được viết, cĩ thể đĩng gĩi thành thư viện để sử dụng khi cần (thư viện động) • Các chương trình nhúng viết bằng ngơn ngữ c thường cĩ các hàm dài khơng quá 30 dịng lệnh 66
  60. Các bước thực thi khi gọi hàm • Các thơng tin của chương trình đang thực thi được cất vào ngăn xếp • Địa chỉ của chương trình mới được lưu vào PC. Chương trình mới được thực hiện cho tới khi gặp lệnh return. • Các thơng tin của chương trình cũ được nạp lại từ ngăn xếp. Địa chỉ lệnh chương trình cũ cần tiếp tục thực hiện được nạp vào PC và CPU sẽ tiếp tục chương trình cũ 67
  61. Ngắt •Ngắt là cơ chế dừng một chương trình đang chạy để thực hiện một chương trình khác khi xảy ra một sự kiện do phần cứng gây ra. •Ngắt được dùng khi –Một sự kiện khẩn cấp cần được đáp ứng tức thời. – Các sự kiện rật chậm. – Chuyển CPU từ chế độ ngủ sang tích cực. –Gọi hệ điều hành 68
  62. Chương trình phục vụ ngắt • Đoạn chương trình được gọi khi xảy ra một ngắt gọi là Chương trình phục vụ ngắt ( interrupt service routine - ISR). •Chương trình xử lý ngắt giống một hàm, ngoại trừ: Nĩ được gọi bất kỳ khi nào xảy ra sự kiện gây ra ngắt, và sự kiện này thường khơng biết trước thời điểm. 69
  63. Cờ ngắt •Mỗi ngắt cĩ một cờ ngắt riêng, để chỉ thị rằng đã cĩ sự kiện cần xử lý gấp. Chẳng hạn Timer A cĩ cờ ngắt TAIFG Cờ TAIFG sẽ tự động bật lên khi TAR về 0. Khi cờ ngắt bật lên, chương trình xử lý ngắt tương ứng sẽ được gọi, trừ trường hợp bị che. •Chương trình xử lý một ngắt chỉ được thực thi khi ngắt này khơng bị che bởi bit GIE – cho phép ngắt tồn cục. Chương trình chính phải bật bít GIE (thuộc thanh ghi SR) để cơ chế ngắt được phép thực hiện • 70
  64. Vector ngắt • Vector ngắt là vùng nhớ cao trong bộ nhớ MSP430. Vùng này chứa các địa chỉ của các ISR. Khi GIE cao và một cờ ngắt bật lên, địa chỉ của ISR tương ứng sẽ được nạp từ IV vào PC. •Mỗi ngắt cĩ một thứ tự ưu tiên. Nếu 2 ngắt xảy ra đồng thời, thì ngắt cĩ độ ưu tiên cao hơn sẽ được thực thi. Thự tự ưu tiên cao cao thì vị trí ISR trong IV càng cao. 71
  65. Các bước thực thi khi một ISR được gọi 1. Nếu CPU đang thực hiện một lệnh – Lệnh đĩ cần được hồn tất. Nếu CPU đang ngủ, xung MCLK được cấp để đưa CPU về chế độ tích cực. 2. Cất PC vào ngăn xếp. 3. Cất SR vào ngăn xếp. 4. Chọn IRS cĩ độ ưu tiên cao nhất 5. Xĩa cờ ngắt của ISR được chọn. 6. Xĩa SR. 7. Đặt địa chỉ của ISR từ IV vào PC. 72
  66. Độ chậm • Độ chậm là thời gian từ lúc xảy ra sự kiên tới khi chương trình xử lý ngắt được bắt đầu. • Trong trường hợp CPU đang thực hiện dở 1 lệnh, thì CPU sẽ cần một nhịp hồn tất và sáu nhịp thực hiện sáu bước cịn lại trước khi bắt đầu ISR. 73
  67. Khai báo ISR • Interrupt Service Routines in C #pragma vector = TIMERA0_VECTOR __interrupt void TA0_ISR (void) 74
  68. void main (void) { WDTCTL = WDTPW|WDTHOLD; // Stop watchdog timer P2OUT = ˜LED1; // Preload LED1 on , LED2 off P2DIR = LED1|LED2; // Set pins with LED1 ,2 to output TACCR0 = 49999; // Upper limit of count for TAR TACCTL0 = CCIE; // Enable interrupts on Compare 0 TACTL = MC_1|ID_3|TASSEL_2|TACLR; // Set up and start Timer A // "Up to CCR0" mode , divide clock by 8, clock from SMCLK , clear timer __enable _interrupt (); // Enable interrupts (intrinsic) for (;;) { // Loop forever doing nothing } // Interrupts do the work } // // Interrupt service routine for Timer A channel 0 #pragma vector = TIMERA0_VECTOR __interrupt void TA0_ISR (void) { P2OUT ˆ= LED1|LED2; // Toggle LEDs } 75
  69. Ngắt khơng che • Cĩ một số ngắt mà cờ GIE khơng che được là –Lỗi bộ tạo dao động OFIFG. – Tranh chấp bộ nhớ ACCVIFG. – Chân RST bị đưa xuống thấp 76
  70. Chế độ cơng suất thấp • Cĩ 1 chế độ tích cực và 5 chế độ cơng suất thấp • Chế độ tích cực: CPU và mọi xung nhịp, mọi khối đều hoạt động. Dịng tiêu thụ I ≈ 300uA. Cĩ thể giảm dịng tiêu thụ nếu giảm áp nguồn nuơi xuống 1,8V, tần số DCO =1Mhz, dịng tiêu thụ cịn khoảng I ≈ 200uA. • LPM0: CPU và MCLK bị khĩa. SMCLK và ACLK hoạt động, dịng tiêu thụ I ≈ 85uA. • LPM3: CPU, MCLK, SMCLK, và DCO bị khĩa chỉ cịng ACLK hoạt động, I ≈ 1uA. • LPM4: CPU và mọi xung nhịp bị khĩa. CPU sẽ chỉ tỉnh lại khi cĩ ngắt bên ngồi. I ≈ 0.1uA. •Ví dụ lập trình C _lowpower_mode_3 (); 77
  71. Quizzes Vì sao Ngắt lại quan trọng với HTN? Cờ ngắt để làm gì? Bít GIE là gì? 78
  72. Bài sau? • Cổng nhập xuất số 79
  73. Bài 5: Cổng nhập xuất số 1. Cấu trúc cổng nhập xuất số (IO Port) 2. Các thanh ghi của IO 3. Chống dội 4. Ma trận bàn phím 5. Lái LED và LED 7 đoạn 6. LCD 80
  74. Cổng nhập xuất số •Nhập xuất thơng dụng nhất là các tín hiệu số với 2 giá trị 0/1(0/3,3,V) •Chương trình ví dụ đã sử dụng PORT 1 để lái LED •. 82
  75. Cổng nhập xuất số • Các chíp MSP430 cĩ thể cĩ từ 10-80 chân IO số. •Mặc dù là chân nhập xuất số, các chân cịn được dùng cho các khối khác như Timer, ADC Khi tái khởi động các chân đều là IO số •Chẳng hạn chân P1.0 cịn được dùng làm TACLK 83
  76. Các thanh ghi của P1 • Các Port đều cĩ các thanh ghi của riêng mình • Port P1 input, P1IN: nhận dữ liệu logic (0/1) từ các chân của P1 (8 bít) • Port P1 output, P1OUT: Ghi dữ liệu ra các chân của P1 85
  77. Các thanh ghi của P1 •Port P1 direction, P1DIR: xác định hướng truyền dữ liệu. Nếu bít i =0, chân P1.i sẽ là INPUT, nếu bít i=1, chân P1.i sẽ là OUTPUT . Khi khởi động các bít P1DIR cĩ giá trị 0 •Port P1 resistor enable, P1REN: Bật một bít của thanh ghi này lên 1 sẽ kich hoạt điện trở kéo lên hoặc kéo xuống tại chân tương ứng. •Port P1 selection, P1SEL: Chọn chân tương ứng là chân nhập xuất số (0 – giá thị mặc nhiên khi khởi động) hoặc cĩ chức năng khác (1). 86
  78. Digital Input and Output • Port P1 interrupt enable, P1IE: Cho phép ngắt trên chân tương ứng nếu bật lên 1, cấm ngắt nếu bít tương ứng là 0 • Port P1 interrupt edge select, P1IES: chọn cạnh lên để tạo ngắt nếu bít tương ứng là 0, hoặc cạnh xuống nếu là 1. Thanh ghi này chỉ cĩ hiệu lực nếu thanh ghi P1IE đã bật • Port P1 interrupt flag, P1IFG: Là thanh ghi chứa các cờ ngắt . Khi một chân được bật cho phép ngắt và cĩ sự thay đổi tín hiệu đúng như thanh ghi P1IES đặt thì cị ngắt tu7ong ứng chân này bật lên. Nêu GIE đã bật thì ISR sẽ được thực thi 87
  79. Quét ma trận bàn phím •Khi số nút nhấn khá lớn, số chân chíp dùng điều kiển các cơng tắc sẽ lớn. • Cĩ thể giảm số chân VDK bắn ma trận bàn phím 88
  80. Quét bàn phím 1. Cấp 011 cho X1X2X3 Đọc Y1Y2Y3Y4 để kiểm tra các nút 1, 4, 7, or *. Các nút khác sẽ khơng làm thay đổi Y1-Y4 vì X2,X3 cĩ giá trị 1 2. Cấp 101 cho X1X2X3 Đọc Y1Y2Y3Y4 để kiểm tra các nút 2, 5, 8, or 0. 3. Cấp 110 cho X1X2X3 Đọc Y1Y2Y3Y4 để kiểm tra các nút 3, 6, 9, or #. 90
  81. LED 7 đoạn 91
  82. Bài tiếptheo 1. Các loại Timer thường gặp 2. Watchdog Timer 3. Timer A 92
  83. Bài 6: Bộ định thời 1. Các loại timer 2. Watchdog timer 3. Timer A 93
  84. Các loại Bộ định thời Watchdog timer: Đồng hồ canh gác : cĩ trong mọi thiết bị dịng MSP430. Chức năng chính là chống lỗi chương trinh nhưng cĩ thể sử dụng như một bộ đếm thời gian chính xác . Timer_A: Cĩ trong mọi thiết bị. Loại Timer A cĩ 3 kênh và là thiết bị định thời đơn giản nhất. Timer Acĩ thể đếm thời gian, đo tần số hoặc đếm các sự kiện lặp Timer_B: Chỉ cĩ trong một số chíp lớn. Đây là cấu trúc mở rộng của Timer A với số kênh lên đến 7 , được sử dụng để tạo các xung PWM điều khiển động cơ Timer Basic1: Chỉ cĩ trong một số chíp MSP430F4XX. Real time –clock: Chỉ cĩ trong một số chíp MSP430 lớn 95
  85. Watchdog Timer (WDT) •Chức năng chính: chống lỗi chương trình như lặp quẩn, treo VĐK •WDT cĩ một thanh ghi đếm lên WDTCNT và khi đạt giới hạn trên (65535) nĩ sẽ khởi động lại VĐK. •Chương trình được viết phải định kỳ xĩa thanh ghi đếm lên của WDT trước khi đạt giới hạn. Nếu khơng hệ thống sẽ bị reset. • Tuy nhiên hoạt động của WDT được cấu hình bởi thanh ghi điều khiển 16-bit WDTCTL. Bật bít WDTHOLT sẽ ngừng hoạt động của WDT 96
  86. WDT luơn sử dụng xung nhịp DCO 1MHz. Khi hoạt động, bít WDTCNTCL bật lên 1 sẽ xĩa thanh ghi WDTCNT 97
  87. // Watchdog config: active , ACLK /32768 -> 1s interval; clear counter #define WDTCONFIG (WDTCNTCL|WDTSSEL) // Include settings for _RST/NMI pin here as well // void main (void) { WDTCTL = WDTPW | WDTCONFIG; // Configure and clear watchdog P2DIR = BIT3 | BIT4; // Set pins with LEDs to output P2OUT = BIT3 | BIT4; // LEDs off (active low) for (;;) { // Loop forever LED2 = ˜IFG1_bit.WDTIFG; // LED2 shows state of WDTIFG if (B1 == 1) { // Button up LED1 = 1; // LED1 off } else { // Button down WDTCTL = WDTPW | WDTCONFIG; // Feed/pet/kick/clear watchdog LED1 = 0; // LED1 on } } } 98
  88. Sử dụng WDT như một bộ định thời •Nếu khơng dùng để kiểm tra lỗi chương trình, WDT cĩ thể được sử dụng như một bộ định thời . •Bật bít WDTTMSEL trong thanh ghi WDTCTL sẽ đặt WDT vào chế độ đếm, tuy nhiên khi đạt giới hạn thì WDTIFG bật lên mà khơng khởi động lại VĐK •Việc đọc WDTCNT cho biết thời gian đã xảy một sự kiện 99
  89. Timer_A •Là bộ định thời đa năng thơng dụng, cĩ mặt trong mọi chíp MSP430. Bộ định thời gồm 2 khối lớn • Timer block: Là khối lõi với thanh ghi TAR 16 bít, khối chọn xung nhịp và khối chia tần làm chậm. Khơi TAR khơng cĩ tín hiệu ra nhưng cĩ thể bật cờ TAIFG khi TAR về 0 • Capture/compare channels: Là khối bắt tín hiệu và so sánh, cĩ 3 khối độc lập với các chỉ số 0,1 và 2. Khối này gồm 0 khối con như sau 100
  90. • Khối bắt tín hiệu Capture : Nhận tín hiệu cần đếm từ bên ngồi • Khối so sánh Compare Gồm thanh ghi TACCR0 (hoặc 1,2) để đếm số tín hiệu hoặc được đặt bằng phần mềm. • Khối tạo ngắt : bật cờ CCIFG khi TAR và TACCR bằng nhau. • Khối lấy mẫu Sample tạo tín hiệu để so sánh •. 101
  91. Các chếđộđịnh thời 103
  92. Bốn chế độ hoạt động • Stop (MC = 0): Bộ định thời dừng hoạt động. Mọi thanh ghi giữ nguyên giá. • Đếm lên (MC=1) TAR sẽ đếm lên tới TACCR0 (đối với kênh 0) và quay về 0. • Liên tục (MC= 2): Đếm lên 0xFFF rồi quay về 0 • Đếm lên/xuống(MC= 3): Thanh ghi TAR đếm lên đến TACCR0 rồi đếm xuống tới 0 và lặp lại •. 104
  93. Embedded Systems Hệ thống nhúng Ts. Lê Mạnh Hải Khoa CNTT, ĐH Kỹ thuật Cơng nghệ TP HCM 105
  94. Chapter 10 : Communication 1. Communication Peripherals in the MSP430 2. Serial Peripheral Interface 3. SPI with the USI 4. SPI with the USCI 5. Inter-integrated Circuit Bus 6. A Simple I²C Master with the USCI_B0 7. A Simple I²C Slave with the USI on a F2013 106
  95. Communication Peripherals in the MSP430 • The universal serial interface (USI) is a lightweight module, which is included in the small F20x2 and F20x3 devices. For a start, it handles only synchronous communication—SPI and I²C. • Universal Serial Communication Interface larger devices in the MSP430F2xx and MSP430F4xx families contain one or more universal serial communication interface (USCI) modules. The hardware handles almost all aspects of the communication, unlike the USI, so the software needs only to provide the data to transmit and store the received data in normal operation. Typically this requires only a couple of small interrupt service routines. • Universal Synchronous/Asynchronous Receiver/Transmitter (USART) is an older module, which has been superseded by the 108 USCI.
  96. Serial Peripheral Interface • The serial peripheral interface was introduced by Motorola and is the simplest synchronous communication protocol in general use. • The only problem is that it is not a fixed standard like I²C. There are plenty of options within “standard” SPI and innumerable variations that go beyond this. 110
  97. • The concept of SPI is based on two shift registers, one in each device, which are connected to form a loop. • The registers usually hold 8 bits. Each device places a new bit on its output from the most significant bit (msb) of the shift register when the clock has a negative edge and reads its input into the lsb of the shift register on a positive edge of the clock. • Thus a bit is transferred in each direction during each clock cycle. • After eight cycles the contents of the shift registers have been exchanged and the transfer is complete. • Transmission and reception are clearly inseparable. 111
  98. The main pins are labeled SOMI, SIMO, and CLK (2 USCI) 112
  99. SPI block in USCI 113
  100. SPI operation There are separate shift registers for transmitting and receiving Moreover, these registers are double-buffered and the user has no direct access to the shift registers themselves. This means that a byte is moved from the receive shift register to RXBUF as soon as reception is complete, which leaves the shift register ready to accept the next transfer. Similarly, a byte written to TXBUF remains in its buffer until the previous byte has been transmitted, at which point it is moved to the transmit shift register. This relaxes considerably the constraints on handling interrupts in the USI, where the shift register must be read and updated rapidly between transfers. Although there are separate registers, reception and transmission are not independent because of the nature of SPI. 114
  101. Read an examples C code for SPI communication For Master msp430g2xx3_uscia0_spi_09.c And for Slave msp430g2xx3_uscia0_spi_10.c 115
  102. Inter-integrated Circuit Bus • The I²C bus was introduced by Philips (now NXP) Semiconductors. It was widely adopted and has become even more popular since its patents expired in 2006. It is a true bus, unlike SPI, with a specification and user manual that can be downloaded from NXP. • Revision 03 of the user manual is document UM10204, dated June 19, 2007. It is clearly written and a lot easier to read than you might expect. The I²C bus uses only two, bidirectional lines: • Serial data (SDA). • Serial clock (SCL). 116
  103. • Structure • Operation: Read from page 534 -542 117
  104. Ơn tập Hệ thống nhúng
  105. 1. Cấu trúc tổng thể của vi điều khiển 2. Sơ đồ khối của chíp TI MSP430G2553 3. Bộ nhớ MSP430G2553: Phân bổ vị trí bộ nhớ và ý nghĩa từng vùng nhớ 4. Cấu tạo CPU và ý nghĩa các thanh ghi trong CPU 5. Các loại xung nhịp (clock) và các chế độ hoạt động 6. Hàm và các bước thực hiện khi gọi một hàm 7. Khái niệm ngắt và chương trình phục vụ ngắt 8. Các bước thực thi khi thực hiện một ngắt. 9. Các chế độ cơng suất thấp. 10. Các cổng nhập xuất số (Digital Input and Output). 11. Quét ma trận bàn phím. Chống dội 12. Các loại LCD. Sơ đồ chân kết nối theo chuẩn HD44780 13. Các loại timer. Cấu trúc và hoạt động của WDT 14. Cấu trúc và các chế độ hoạt động của TimerA0 15. Kết nối Serial Peripheral Interface (SPI). Cấu trúc và hoạt động. 16. Kết nối Inter-integrated Circuit Bus (I2C).
  106. Kiểm tra giữa kỳ •Viết CT hiển thị phút và giây trên Led 7 đoạn. Sử dụng Timer A (7 điểm) •Cứ 1 mỗi giây đèn LED L4 phải sáng / tắt dấu chấm (LED h) 1 lần