Đề tài Tìm hiểu vi điều khiển arm7 lpc2214

Khái quát: (general description trang 15 usermanual) LPC2214 là vi điều khiển 32bit hỗ trợ thời gian thực và trace nhúng xây dựng trên cấu trúc của ARM7TDMI-S. LPC2214 có 256kB bộ nhớ Flash tốc độ cao, vùng nhớ nội mở rộng tới 128 bit địa chỉ, cấu hình cho phép thực thi các chỉ lệnh 32bit chỉ trong 1 chu kì xung nhịp. Để tiện cho những ứng dụng nhỏ, LPC2214 hỗ trợ tập lệnh 16bit thu gọn (Thumb) Với chế độ thu gọn này, kích thước tập lệnh chỉ còn 70% so với tập lệnh 32bit làm cùng chức năng.

pdf32 trang | Chia sẻ: tlsuongmuoi | Lượt xem: 1988 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Đề tài Tìm hiểu vi điều khiển arm7 lpc2214, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
2.30 và P2.31) 5V. Nếu như không sử dụng bộ chuyển đổi A/D thì các chân này cũng có thể sử dụng như các chân I/O 5V. Xem thêm phần A/D. P2.0 98 I/O D0: line 0 dữ liệu bộ nhớ ngoài P2.1 105 I/O D1: line 1 dữ liệu bộ nhớ ngoài P2.2 106 I/O D2: line 2 dữ liệu bộ nhớ ngoài P2.3 108 I/O D3: line 3 dữ liệu bộ nhớ ngoài P2.4 109 I/O D4: line 4 dữ liệu bộ nhớ ngoài P2.5 114 I/O D5: line 5 dữ liệu bộ nhớ ngoài P2.6 115 I/O D6: line 6 dữ liệu bộ nhớ ngoài P2.7 116 I/O D7: line 7 dữ liệu bộ nhớ ngoài P2.8 117 I/O D8: line 8 dữ liệu bộ nhớ ngoài P2.9 118 I/O D9: line 9 dữ liệu bộ nhớ ngoài P2.10 120 I/O D10: line 10 dữ liệu bộ nhớ ngoài P2.11 124 I/O D11: line 11 dữ liệu bộ nhớ ngoài P2.12 125 I/O D12: line 12 dữ liệu bộ nhớ ngoài P2.13 127 I/O D13: line 13 dữ liệu bộ nhớ ngoài P2.14 129 I/O D14: line 14 dữ liệu bộ nhớ ngoài P2.15 130 I/O D15: line 15 dữ liệu bộ nhớ ngoài P2.16 131 I/O D16: line 16 dữ liệu bộ nhớ ngoài P2.17 132 I/O D17: line 17 dữ liệu bộ nhớ ngoài P2.18 133 I/O D18: line 18 dữ liệu bộ nhớ ngoài P2.19 134 I/O D19: line 19 dữ liệu bộ nhớ ngoài P2.20 136 I/O D20: line 20 dữ liệu bộ nhớ ngoài P2.21 137 I/O D21: line 21 dữ liệu bộ nhớ ngoài P2.22 1 I/O D22: line 22 dữ liệu bộ nhớ ngoài Dương Huỳnh Bảo_DD04KSTN P2.23 10 I/O D23: line 23 dữ liệu bộ nhớ ngoài P2.24 11 I/O D24: line 24 dữ liệu bộ nhớ ngoài P2.25 12 I/O D25: line 25 dữ liệu bộ nhớ ngoài P2.26 13 I/O D26: line 26 dữ liệu bộ nhớ ngoài BOOT0 P2.27 16 I/O D27: line 27 dữ liệu bộ nhớ ngoài BOOT1 P2.28 17 I/O D28: line 28 dữ liệu bộ nhớ ngoài P2.29 18 I/O D29: line 29 dữ liệu bộ nhớ ngoài P2.30 19 I/O D30: line 30 dữ liệu bộ nhớ ngoài AIN4 : bộ chuyển đổi A/D, ngõ vào 4. Được nối nối tiếp với ngõ vào tương tự. P2.31 20 I/O D31: line 31 dữ liệu bộ nhớ ngoài AIN5 : bộ chuyển đổi A/D, ngõ vào 5. Được nối nối tiếp với ngõ vào tương tự. P3.0 đến P3.31 89-87,81,80,74- 71,66- 62,56,55,53,48- 44,41,40,36,35,30- 27,97,96 I/O Port 2: port 2 gồm 32-bit I/O , có thể điều khiển riêng lẻ từng bit. Hoạt động của các chân của port 2 phụ thuộc vào chức năng từng chân được chọn thông qua khối kết nối chân (Pin Connect Block) Note: Port 2 có thể sử dụng như là ngõ vào của khối A/D (P3.28 và P3.29) 5V. Nếu như không sử dụng bộ chuyển đổi A/D thì các chân này cũng có thể sử dụng như các chân I/O 5V. Xem thêm phần A/D. P3.0 89 I/O A0: line 0 địa chỉ bộ nhớ ngoài P3.1 88 I/O A1: line 1 địa chỉ bộ nhớ ngoài P3.2 87 I/O A2: line 2 địa chỉ bộ nhớ ngoài P3.3 81 I/O A3: line 3 địa chỉ bộ nhớ ngoài P3.4 80 I/O A4: line 4 địa chỉ bộ nhớ ngoài P3.5 74 I/O A5: line 5 địa chỉ bộ nhớ ngoài P3.6 73 I/O A6: line 6 địa chỉ bộ nhớ ngoài P3.7 72 I/O A7: line 7 địa chỉ bộ nhớ ngoài P3.8 71 I/O A8: line 8 địa chỉ bộ nhớ ngoài P3.9 66 I/O A9: line 9 địa chỉ bộ nhớ ngoài P3.10 65 I/O A10: line 10 địa chỉ bộ nhớ ngoài P3.11 64 I/O A11: line 11 địa chỉ bộ nhớ ngoài P3.12 63 I/O A12: line 12 địa chỉ bộ nhớ ngoài P3.13 62 I/O A13: line 13 địa chỉ bộ nhớ ngoài P3.14 56 I/O A14: line 14 địa chỉ bộ nhớ ngoài P3.15 55 I/O A15: line 15 địa chỉ bộ nhớ ngoài P3.16 53 I/O A16: line 16 địa chỉ bộ nhớ ngoài P3.17 48 I/O A17: line 17 địa chỉ bộ nhớ ngoài P3.18 47 I/O A18: line 18 địa chỉ bộ nhớ ngoài P3.19 46 I/O A19: line 19 địa chỉ bộ nhớ ngoài Dương Huỳnh Bảo_DD04KSTN P3.20 45 I/O A20: line 20 địa chỉ bộ nhớ ngoài P3.21 44 I/O A21: line 21 địa chỉ bộ nhớ ngoài P3.22 41 I/O A22: line 22 địa chỉ bộ nhớ ngoài P3.23 40 I/O A23: line 23 địa chỉ bộ nhớ ngoài P3.24 36 O CS3: Chân Chip Select 3 tác động mức thấp (Bank 3 địa chỉ trong khoảng 8300 0000 – 83FF FFFF) P3.25 35 O CS2: Chân Chip Select 2 tác động mức thấp (Bank 2 địa chỉ trong khoảng 8200 0000 – 82FF FFFF) P3.26 30 O CS1: Chân Chip Select 1 tác động mức thấp (Bank 1 địa chỉ trong khoảng 8100 0000 – 81FF FFFF) P3.27 29 O WE: chân cho phép ghi tác động mức thấp P3.28 28 O I BLS3: chân chọn Byte Lane tác động mức thấp (Bank3) AIN7: bộ chuyển đổi A/D, ngõ vào 7. Được nối nối tiếp với ngõ vào tương tự. P3.29 27 O I BLS2: chân chọn Byte Lane tác động mức thấp (Bank2) AIN6: bộ chuyển đổi A/D, ngõ vào 6. Được nối nối tiếp với ngõ vào tương tự. P3.30 97 O BLS1: chân chọn Byte Lane tác động mức thấp (Bank1) P3.31 96 O BLS0: chân chọn Byte Lane tác động mức thấp (Bank0) 22 NC: để trống 135 I RESET\: ngõ vào Reset ngoài 142 I XTAL1: ngõ vào bộ dao động 141 O XTAL2: ngõ ra bộ dao động 3,9,26,38,54,67, 79,93,103,107 ,111,128 I Vss: Ground 0V 139 I Vssa: Analog Ground:0V dùng để giảm nhiễu 138 I Vssa_pll: PLL Analog Ground:0V dùng để giảm nhiễu 37,110 I V18: Nguồn cung cấp 1.8V.cho các mạch bên trong. 143 I V18A: Nguồn analog 1.8V dùng để giảm nhiễu 2,31,39,51,57,77 94,104,112,119 I V3: nguồn cung cấp 3.3V cho I/O port 14 I V3A: nguồn analog 3.3V cho I/O port dùng để giảm nhiễu § Dương Huỳnh Bảo_DD04KSTN B. Khối điều khiển hệ thống: 1. Khái quát: Khối điều khiển hệ thống có một số chức năng và thanh ghi có quan hệ với một số thiết bị ngoại vi: Tinh thể dao động. Ngõ vào ngắt ngoài. Điều khiển định vùng bộ nhớ. PLL (vòng khóa pha) Điều khiển nguồn. Reset. Phân chia bus ngoại vi VPB. Đồng hồ wake up hệ thống. 2. Các chân chức năng: Tên Hướng truyền Chức năng X1 Input Ngõ vào nguồn dao động. X2 Ra Ngõ ra của tinh thể dao động từ bộ khuyếch đại dao động. EINT0 Vào -Ngõ vào ngắt ngoài 0. Có thể dùng chức năng này để wake hệ thống từ các chế độ tiết kiệm nguồn -P0.1 và P0.16 có thể được chọn để thực hiện chức năng này. -Mức thấp trên các chân này ngay sau khi Reset ngoài sẽ cấu hình cho phần cứng ngoài yêu cầu vào ISP. EINT1 Vào Ngắt ngoài 1. Các chân P0.3 và P0.14 thực hiện chức năng này. EINT2 Vào Ngắt ngoài 2. Các chân P0.7 và P0.15 thực hiện chức năng này. EINT3 Vào Ngắt ngoài 3. Các chân P0.9, P0.20 và P0.30 thực hiện chức năng này. RESET Vào Ngõ vào Reset ngoài, mức thấp trên chân này sẽ đưa chip vào chế độ Reset: các ngoại vi vào trạng thái mặc định, vi xử lý bắt đầu từ địa chỉ 0x0000 0000. Bảng 1: Khái quát các chân chức năng 3. Các thanh ghi chức năng: Tên Chức năng Hướng truy cập Giá trị Reset1 Địa chỉ Ngắt ngoài EXTINT Thanh ghi chứa cờ ngắt ngoài Đọc/Ghi 0 0xE01FC140 EXTWAKE Thanh ghi Wakeup ngắt ngoài. Đọc/Ghi 0 0xE01FC144 EXTMODE Thanh ghi định chế độ ngắt ngoài Đọc/Ghi 0 0xE01FC148 EXTPOLAR Thanh ghi phân cực (mức/cạnh) ngắt ngoài Đọc/Ghi 0 0xE01FC14C Điều khiển phân vùng bộ nhớ MEMMAP Điều khiển phân vùng ngắt ngoài Đọc/Ghi 0 0xE01FC040 Vòng khóa pha PLLCON Thanh ghi điều khiển PLL Đọc/Ghi 0 0xE01FC080 PLLCFG Cấu hình thanh ghi PLL Đọc/Ghi 0 0xE01FC084 PLLSTAT Thanh ghi trạng thái PLL Chỉ đọc 0 0xE01FC088 PLLFEED Thanh ghi cấp giá trị PLL Chỉ ghi NA 0xE01FC08C Điều khiển nguồn PCON Thanh ghi điều khiển nguồn Đọc/Ghi 0 0xE01FC0C0 1 Không bao gồm các bit dự trữ Dương Huỳnh Bảo_DD04KSTN PCONP Điều khiển nguồn cho ngoại vi. Đọc/Ghi 0x3BE 0xE01FC0C4 Bộ chia bus ngoại vi VPB VPBDIV Điều khiển chia bus ngoại vi VPB Đọc/Ghi 0 0xE01FC100 Bảng 2: Khái quát về thanh ghi điều khiển hệ thống 4. Nguồn dao đông: Cấu hình trên chip cho phép chọn dao động tần số từ 1MHz-30MHz. Thường gặp dạng nguồn dao động ngoài như hình vẽ dưới: Hình 2: Chọn dao động từ nguồn ngoài (a) Hình 3: Chọn tần số hoạt động từ nguồn thạch anh ngoài (b) Hình 4: Thuật toán chọn tần số dao động của MCU 5. Ngõ vào ngắt ngoài: LPC2214 có 4 ngõ vào ngắt ngoài được chọn trên các chân chức năng. Các chân chức năng này có thể được chọn để wakeup hệ thống khi vi xử lý dang ở chế độ tiết kiệm nguồn. 5.1. Khái quát các thanh ghi: Chức năng ngắt ngoài dùng 4 thanh ghi đi kèm với nó. Thanh ghi EXINT chứa các cờ ngắt và thanh ghi EXTWAKEUP chứa bit cho phép từng ngắt ngoài có thể wakeup hệ thống từ chế độ power down. Thanh ghi EXTMODE và EXTPOLAR cho biết các thông số ngắt mức/cạnh. Địa chỉ Tên Chức năng Hướng truy cập Dương Huỳnh Bảo_DD04KSTN 0xE01FC140 EXTINT Thanh ghi cờ ngắt ngoài chứa các cờ ngắt ngoài cho EINT0, EINT1, và EINT2. Xem bảng 12. Đọc/ghi 0xE01FC144 EXTWAKE Thanh ghi Wakeup ngắt ngoài chứa 3 bit cho phép điều khiển mỗi nguồn ngắt ngoài có thể là nguồn để wakeup hệ thống khi vi xử lý đang trong chế độ Power down. Xem bảng 13 Đọc/ghi 0xE01FC148 EXTMODE Thanh ghi chọn chế độ ngắt ngoài là mức hay cạnh. Đọc/ghi 0xE01FC14C EXTPOLAR Thanh ghi phân cực ngắt ngoài: điều khiển ngắt trên mỗi chân là cạnh hay mức. Đọc/ghi Bảng 3: Các thanh ghi điều khiển quá trình ngắt ngoài từ ngoại vi 5.2. Thanh ghi chứa các cờ ngắt ngoài(EXINT-0xE01FC140): Khi ngõ vào ngắt ngoài được chọn, sự thay đổi mức (hoặc cạnh) trên chân chức năng tương ứng sẽ tạo ra cờ ngắt trên thanh ghi ngắt ngoài. Cờ ngắt này sẽ được đáp ứng bởi vector ngắt (VIC) tương ứng. Ghi ‘1’ vào các bit EINT0 đến EINT3 trên thanh ghi EXINT sẽ xóa các bit đáp ứng. Nếu ở chế độ ngắt mức, việc ghi các bit này sẽ có tác động chỉ khi các chân ngắt ngoài tương ứng đang ở trạng thái không tích cực. EXTINT Chức năng Chú thích Giá trị RESET 0 EINT0 +Ngắt mức: EINT0=1 nếu chức năng EINT0 được chọn và chân tương ứng của nó lên mức tích cực (P0.1 và P0.16). +Ngắt cạnh: EINT0=1 nếu chức năng EINT0 được chọn và chân chức năng của nó chuyển mức (cạnh lên hoặc cạnh xuống) +Bit này được xóa bằng cách gán cho nó trị =1, trừ trường hợp ngắt mức, khi mà chân tương ứng đang ở mức tích cực. 0 1 EINT1 Như trên, với chân chức năng tương ứng là P0.3 và P0.14 0 2 EINT2 Như trên, với chân chức năng tương ứng là P0.7 và P0.15 0 3 EINT3 Như trên, với chân chức năng tương ứng là P0.9, P0.20 và P0.30 0 7:4 Dự trữ Các bit dự trữ, chưa được định nghĩa. NA Bảng 4: Thanh ghi chứa cờ ngắt ngoài 5.3. Thanh ghi thiết lập chức năng wakeup dùng ngắt ngoài(EXTWAKEUP- 0xE01FC144): EXTWAKE Chức năng Diễn giải Giá trị Reset 0 EXTWAKE0 EXTWAKE0=1, xảy ra ngắt EINT0 sẽ wake up vi xử lý từ chế độ Power Down 0 1 EXTWAKE1 Tương tự với EINT1 0 2 EXTWAKE2 Tương tự với EINT2 0 3 EXTWAKE3 Tương tự với EINT3 0 7:4 Dự trữ Dự trữ, chưa định nghĩa, không được dùng NA Bảng 5: Thanh ghi thiết lập chức năng wakeup hệ thống dùng ngắt ngoài 5.4. Thanh ghi thiết lập các chế độ ngắt ngoài(EXTMODE-0xE01FC148): Các bit trên thanh ghi này chọn cách ngắt mức hay cạnh, chỉ có những chân được chọn cho chức năng ngẳt ngoài chịu tác động, và chúng được phép sử dụng nhờ thanh ghi VICIntEnable. Chương trình phần mềm chỉ có thể can thiệp vào các bit trên thanh ghi này bằng cách vô hiệu hóa ngắt ở thanh ghi VICIntEnablevà ghi ‘1’ vào bit EXTINT trước khi xóa bit EXTINT để có thể thay đổi các chế độ hoạt động. EXTMODE Chức năng Chú thích Giá trị Reset Dương Huỳnh Bảo_DD04KSTN 0 EXTMODE0 EXTMODE0 =0, ngắt mức được chọn trên EINT0. EXTMODE0=1, Ngắt cạnh được chọn trên EINT0 0 1 EXTMODE1 Tương tự với EXTMODE1 và EINT1 0 2 EXTMODE2 Tương tự với EXTMODE2 và EINT2 0 3 EXTMODE3 Tương tự với EXTMODE3 và EINT3 0 7:4 Dự trữ Dự trữ, chưa định nghĩa, không được dùng NA Bảng 6: Thanh ghi chọn chế độ ngắt ngoài (mức hay cạnh) 5.5. Thanh ghi thiết lập cực tính cho chế độ ngắt ngoài (EXTPOLAR - 0xE01FC14C): Nếu là ngắt mức, các bit của thanh ghi này xác định ngắt khi chân chức năng tương ứng sẽ xảy ra ngắt khi ở mức cao hay mức thấp. Nếu là ngắt cạnh, các bit của thanh ghi này xác định là sẽ xảy ra ngắt khi tác động cạnh lên hay cạnh xuống ở các chân chức năng tương ứng. Chương trình phần mềm chỉ có thể can thiệp vào các bit trên thanh ghi này bằng cách vô hiệu hóa ngắt ở thanh ghi VICIntEnablevà ghi ‘1’ vào bit EXTINT trước khi xóa bit EXTINT để có thể thay đổi cực tính cho chế độ hoạt động. EXTPOLAR Chức năng Diễn giải Giá trị khi Reset 0 EXTPOLAR0 +EXTPOLAR0=0, EINT0 xảy ra ngắt khi ở mức thấp hoặc tác động cạnh xuống. (Được định nghĩa bởi EXTMODE0). +EXTPOLAR0=1, EINT0 xảy ra ngắt khi ở mức cao hoặc tác động cạnh lên. (Được định nghĩa bởi EXTMODE0). 0 1 EXTPOLAR1 Tương tự với EXTPOLAR1 và EXTMODE1. 0 2 EXTPOLAR2 Tương tự với EXTPOLAR2 và EXTMODE2. 0 3 EXTPOLAR3 Tương tự với EXTPOLAR3 và EXTMODE3. 0 7:4 Dự trữ Dự trữ, chưa định nghĩa, không được dùng NA Bảng 7: Thanh ghi thiết lập cực tính cho chế độ ngắt ngoài 5.6. Kết hợp nhiều chân ngắt ngoài cho cùng nguồn ngắt: Phần mềm có thể chọn nhiều chân phục vụ cho 1 nguồn ngắt từ EINT0:3 trong khối thanh ghi chọn chân (Pin Select block). § Ở chế độ tích cực mức thấp, trạng thái của tất cả các chân chọn trong EINT sẽ sử dụng logic AND. § Ở chế độ tích cực mức cao, trạng thái của tất cả các chân chọn trong EINT sẽ sử dụng logic OR. § Ở chế độ ngắt cạnh, không cần để ý tới cực tính, chân sử dụng sẽ là GPIO thấp nhất. (nếu chon nhiều chân kết hợp ngắt cạnh có thể gây lỗi chương trình) Dương Huỳnh Bảo_DD04KSTN Hình 5: Chọn logic cho các ngăt ngoài 6. Vòng khóa pha(Phase locked loop-PLL): PLL hoạt động với tần số dao động từ 1-25MHz. Ngõ vào tần số được nhân vào CCLK trong tầm từ 10MHz đến 60MHz sử dụng máy dao động điều khiển hiện tại(Current Controlled Oscillator-CCO) Giá trị nhân vào có thể trong phạm vi từ 1 đến 32 (số nguyên) <thật ra, với LPC2214, hệ số này nhỏ hơn 6 vì bị giới hạn ngưỡng trên của tần số dao động> CCO hoạt động trong tầm tần số từ 156MHz đến 320MHz, bởi vậy, có thêm một bộ chia trong vòng (loop) để giữ giá trị CCO trong tầm giới hạn tần số khi PLL tạo tần số dao động mong muốn. Bộ chia ngoài có các số chia là 2,4,8,16 để tạo tín hiệu xung nhịp ngõ ra. Nếu số chia là 2, nó đảm bảo rằng tín hiệu ngõ ra của PLL có độ gợn 50%. Hoạt động của PLL được điều khiển bởi thanh ghi PLLCFG. Có 2 thanh ghi được bảo vệ để chống lại sự cố xảy ra do thay đổi các thông số của PLL hoặc PLL không hoạt động.Vì tất cả các thành phần trên chip, kể cả đồng hồ Watchdog, đều phụ thuộc vào PLL khi nó cung cấp xung nhịp cho chip, các sự cố xảy ra với PLL có thể gây ra các hoạt động không mong muốn trên vi điều khiển. Chức năng bảo vệ của PLL được thực hiện bằng cách cập nhật giá trị liên túc giống như đồng hồ Watchdog. PLL không hoạt động khi chip Reset hoặc vào chế độ Power Down. PLL chỉ hoạt động khi người lập trình cho phép. Chương trình lập trình phải định cấu hình cho PLL, cho nó hoạt động, chờ PLL khóa pha, sau đó xem PLL như là nguồn xung nhịp. 6.1. Miêu tả thanh ghi: PLL được điều khiển bằng các thanh ghi trong bảng dưới đây. Lưu ý rằng việc thiết đặt các giá trị PLL không phù hợp có thể làm thiết bị hoạt động sai. Địa chỉ Tên gọi Chức năng Truy cập 0xE01FC080 PLLCON Thanh ghi điều khiển PLL. Thanh ghi này giữ giá trị để cập nhật các bit điều khiển PLL. Giá trị ghi vào thanh ghi này sẽ có tác dụng khi xảy ra quá trình cập nhật giá trị PLL mới hợp lệ. Đọc/Ghi 0xE01FC084 PLLCFG Thanh ghi cấu hình PLL. Thanh ghi này giữ giá trị để cập nhật cấu hình PLL mới. Giá trị ghi vào thanh ghi này sẽ có tác dụng khi xảy ra quá trình cập nhật giá trị PLL mới hợp lệ. Đọc/Ghi 0xE01FC088 PLLSTAT Thanh ghi trạng thái PLL. Đọc ngược giá trị của thanh ghi này để biết thông tin điều khiển và cấu hình của PLL. Nếu thanh ghi PLLCON hoặc PLLCFG đã Chỉ đọc Dương Huỳnh Bảo_DD04KSTN được ghi giá trị mới, nhưng quá trình cập nhật PLL liên tục(feed) không xảy ra, nó sẽ không ảnh hưởng tới trạng thái PLL hiện tại. Đọc giá trị của thanh ghi này sẽ cho biết giá trị thật sự điều khiển PLL hoặc trạng thái thật sự của PLL trong thời điểm đó. 0xE01FC08C PLLFEED Thanh ghi cập nhật liên tục (cho ăn-feed) giá trị thanh ghi PLL. Feed Register. Thanh ghi này cho phép load các thông tin về điều khiển và cấu hình của thanh ghi PLLCON và PLLCFG vào thanh ghi phụ (shadow) có ảnh hưởng trực tiếp lên hoạt động của PLL. Chỉ ghi Bảng 8: Các thanh ghi PLL Hình 6: Giản đồ khối PLL 6.2. Thanh ghi điều khiển PLL(PLLCON - 0xE01FC080) Thanh ghi điều kiển PLL chứa các bit cho phép và kết nối PLL. Cho phép PLL để nó thử khóa các giá trị thiết lập hiện tại của bộ chia và nhân tần số. Kết nối PLL để vi xử lý hoạt động nhờ xung nhịp ngõ ra của PLL. Sự thay đổi của thanh ghi PLL không ảnh hưởng hệ thống tới khi quá trình cập nhật giá trị tuần tự liên tục diễn ra đúng. <Xem thêm ở thanh ghi cập nhật giá trị PLL liên tục -PLL Feed Register(PLLFEED - 0xE01FC08C)> PLLCON Chân chức năng Diễn tả chức năng Giá trị Reset 0 PLLE Cho phép PLL Enable. Khi PLLE=’1’ và sau khi quá trình cập nhật giá trị PLL hợp lệ, bit này sẽ cho phép PLL để nó khóa giá trị tần số yêu cầu. Xem thêm ở thanh ghi PLLSTAT. 0 1 PLLC Kết nối PLL. Khi [PLLC,PLLE]=‘11’, sau khi quá trình cập nhật giá trị PLL diễn ra hợp lệ, ngõ ra xung nhịp của PLL được chọn là xung nhịp của hệ thống. Ngược lại, xung nhịp của nguồn dao động là xung nhịp của hệ thống 0 7:2 Dự trữ Dự trữ, không được sử dụng. NA Bảng 9: Thanh ghi điều khiển PLL(PLLCON - 0xE01FC080) Dương Huỳnh Bảo_DD04KSTN PLL phải được thiết đặt, cho phép, và thiết lập khóa (tạo được tần số dao động ổn định) trước khi nó có thể thành nguồn xung nhịp hệ thống. khi chuyển từ tần số dao động ngoài thành xungnhịp PLL hoặc ngược lại, mạch dao động nội đưlợc vần hành để đảm bảo rằng không tạo ra các glitches. Phần cứng thì không đảm bảo rằng PLL được khóa (dao động ổn định với tần số mong muốn) trước khi kết nối hay sẽ tự động không kết nối khi tần số dao động không ổn định. Nếu xảy ra lỗi trên xung nhịp PLL khi đang hoạt động, kết quả giống như xung nhịp máy tạo dao động không ổn định và việc không kết nối PLL sẽ phải bắt buộc trong trường hợp này. 6.3. Thanh ghi tạo cấu hình PLL(PLLCFG - 0xE01FC084) Thanh ghi PLLCFG chứa các giá trị của bộ nhân và chia của PLL. Sự thay đổi giá trị của thanh ghi này chỉ có tác dụng khi mà việc cập nhật giá trị PLL mới đã diễn ra hợp lệ PLLCFG Tên chức năng Chú thích chức năng Giá trị reset 4:0 MSEL4:0 Giá trị bộ nhân của PLL. Multiplier value. Đưa ra giá trị "M" ở phép tính tần số PLL. 0 6:5 PSEL1:0 Giá trị bộ chia của PLL. Multiplier value. Đưa ra giá trị "P" ở phép tính tần số PLL. 0 7 Dự trữ Dự trữ, không được sử dụng NA Bảng 10: Thanh ghi cấu hình cho PLL(PLLCFG - 0xE01FC084) 6.4. Thanh ghi trạng thái PLL(PLLSTAT - 0xE01FC088) Thanh ghi chỉ đọc này cho ta các giá trị thông số của PLL có tác động ngay thời điểm đọc. PLLSTAT Tên chức năng Diễn giải chức năng Giá trị reset 4:0 MSEL4:0 Giá trị bộ nhân hiện tại của PLL. 0 6:5 PSEL1:0 Giá trị bộ chia hiện tại của PLL. 0 7 Dự trữ Dự trữ, không được sử dụng NA 8 PLLE Giá trị bit cho phép PLL hiện tại. +PLLE=’1’: PLL đang sử dụng. +PLLE=’0’: PLL không được sử dụng. Bit này sẽ tự động xóa khi vào chế độ Power Down. 0 9 PLLC Giá trị bit điều khiển PLL hiện tại. +PLLC-PLLE=’11’: PLL đang sử dụng và được kết nối vào nguồn xung nhịp. +PLLC-PLLE≠’11’: PLL không được sử dụng, nguồn dao động lúc này lấy từ xung nhịp ngoài. Bit này sẽ tự động xóa khi vào chế độ Power Down. 0 10 PLOCK Bit cho biết trạng thái khóa của PLL. +PLOCK=’1’: PLL đã hoạt động ổn định tại tần số mong muốn. +PLOCK=’0’: PLL chưa hoạt động ổn định tại tần số mong muốn. 0 15:11 Dự trữ Dự trữ, không được sử dụng NA Bảng 11: Thanh ghi trạng thái PLL(PLLSTAT - 0xE01FC088) i. Ngắt PLL: Bit PLOCK trên thanh ghi PLLSTAT được nối với bộ điều khiển ngắt. nó cho phép chương trình phần mềm tích cực PLL và tiếp tục thực hiện các chức năng khác mà không cần đợi PLL xác lập tại tần số mong muốn. Khi ngắt xảy ra (PLOCK=’1’), PLL có thể được kết nối, và không cho phép ngắt. 6.5. Các chế độ hoạt động của PLL: PLLC PLLE Chức năng PLL 0 0 Tắt PLL và không kết nối với nguồn. Hệ thống hoạt động nhờ ngõ vào xung nhịp cố định. 0 1 Mở PLL nhưng chưa chắc đã kết nối với nguồn. PLL có thể kết nôi sau khi PLOCK được xác nhận. 1 0 Giống trường hợp ‘00’. Dương Huỳnh Bảo_DD04KSTN 1 1 Cho phép và kết nối PLL với nguồn tạo dao động. MCU hoạt động nhờ ngõ ra xung nhịp của PLL. Bảng 12: Kết hợp các bit điều khiển PLL 6.6. Thanh ghi cập nhật giá trị PLL liên tục (PLLFEED - 0xE01FC08C) Giá trị cập nhật liên tục phải được ghi vào các thanh ghi PLLFEED nhằm mục đích các thay đổi ở PLLCON và PLLCFG diễn ra, quá trình cập nhật giá trị ấy bao gồm: 1. PLLFEED=0xAA 2. PLLFEED=0x55 Phải thực hiện đúng trình tự cập nhật giá trị như trên, và phải trong các chu kì xung nhịp liên tục. Điều cần lưu ý nữa là các ngắt trong quá trình cập nhật liên tiếp giá trị cho PLL đều không được phép xảy ra. Nếu 1 trong 2 giá trị cập nhật là không đúng, hoặc 1 trong những lưu ý không được tuân thủ nghiêm ngặt, những thay đổi trên thanh ghi PLLCON hoặc PLLCFG sẽ không có tác dụng. PLLFEED Tên chức năng Diễn giải chức năng Giá trị Reset 7:0 PLLFEED Quá trình cập nhật liên tục PLL phải được ghi vào thanh ghi này để sự thay đổi cấu hình và điều khiển thanh ghi PLL có tác dụng. Không xác định Bảng 13: Thanh ghi cập nhật giá trị PLL liên tục(PLLFEED - 0xE01FC08C) 6.7. PLL và chế độ Power Down: Chế độ Power Down sẽ tự động tắt và không kết nối PLL. Wakeup từ Power Down không tự động cập nhật lại các giá trị thiết đặt của PLL. Điều đó phải được làm bằng chương trình phần mềm.Bởi vây, cần có chương trình gọi ngay PLL khi các ngắt làm cho hệ thống WakeUp từ Power Down, lưu ý là không được dùng các thông số sẵn có trên PLL trước khi vào Power Down, vì nó đã mất đi hoặc tùy định. 6.8. Tính toán tần số hoạt động của PLL: Các thông số đáng chú ý: v Fosc: Tần số dao động của tinh thể. v Fcco: Tần số của máy dao động được điều khiển hiện tại. v CCLK: ngõ ra PLL v M: Hệ số nhân của PLL v P: Hệ số chia của PLL. Tần số ngõ ra PLL có thể tính từ công thức: 2 osc osc f CCLK M f P = ´ = Tần số CCO có thể tính nhờ công thức: 2 2cco oscf CCLK P P M f= ´ = ´ ´ • Fosc=[[10 MHz:25 MHz]. • CCLK=[10 MHz:Fmax] (tần số tối đa cho phép của LPC2214) • Fcco =[156 MHz:320 MHz] 6.9. Thủ tục xác định cấu hình PLL: Trong những ứng dụng cụ thể sử dụng PLL, nó được cấu hình như sau: 1. Chọn CCLK mong muốn. 2. Chọn Fosc. 3. Tính M từ công thức: M=CCLK/Fosc. M=[1:32]. Giá trị viết vào bit MSEL trên thanh ghi PLLCFG=M- 1. 4. Tính P từ công thức. Dương Huỳnh Bảo_DD04KSTN Các bit PSEL PLLCFG[6:5] Giá trị của P 00 1 01 2 10 4 11 8 Bảng 14: Giá tri các hệ số chia của PLL Các bit MSEL CFG[4:0] Giá trị của M 00000 1 00001 2 00010 3 00011 4 ... ... 11110 31 11111 32 Bảng 15: Các giá trị của bộ nhân PLL Ví dụ về PLL: Hệ thống thiết kế có Fosc=10MHz và cần CCLK=60MHz. Lời giải: M=CCLK/Fosc=6àM-1=5àPLLCFG[4:0]=’00101’ P= Fcco / (CCLK×2), sử dụng điều kiện: Fcco=[156MHz:320MHz] àP=[1.36:2.37]àP=2àPLLCFG[6:5] = ‘01’. 7. Điều khiển nguồn: LPC2214 có 2 chế độ tiết kiệm nguồn: Idle và Power Down: +Trong chế độ Idle, tất cả các chỉ lệnh đều trì hoãn tới khi quá trình Reset xảy ra, ngoại vi vẫn hoạt động trong chế độ Idle và có thể sinh ra ngắt để đưa hệ thống trở lại hoạt động bình thường. +Trong chế độ Power Down, xung nhịp hệ thống không còn hoạt động, các chân ngoại vi ở trạng thái tĩnh. Năng lượng tiêu thụ gần như bằng 0. Có thể phục hồi hệ thống từ Power Down bằng cách Reset hoặc ngắt ngoài. Chức năng điều khiển nguồn cho ngoại vi cho phép từng chân ngoại vi riêng biệt hoạt động, hoặc không hoạt động, và hệ thống sẽ tiết kiệm năng lượng hơn nữa. 7.1. Diễn tả thanh ghi: Địa chỉ Tên chức năng Diễn tả chức năng Truy cập 0xE01FC0C0 PCON Thanh ghi điều khiển nguồn. Thanh ghi này chứa các bit điều khiển để vận hành 1 trong 2 chế độ Power down hoặc Idle. Đọc/Ghi 0xE01FC0C4 PCONP Thanh ghi điều khiển nguồn cho ngoại vi. Thanh ghi này chứa các bit điều khiển để cho phép/không cho phép từng chức năng riêng biệt của ngoại vi. Đọc/Ghi Bảng 16: Các thanh ghi điều khiển nguồn 7.2. Thanh ghi điều khiển nguồn (PCON-0xE01FC0C0): Thanh ghi này chứa 2 bit: IDL và PD. Chi tiết xem bảng dưới đây: PCON Tên chức năng Diễn tả chức năng Giá trị Reset 0 IDL Chế độ Idle. Khi IDL=’1’, một số chân ngoại vi vẫn còn hoạt động, nguồn ngắt ngoài hoặc Reset ngoài được sử dụng để phục hồi lại trạng thái hoạt động. 0 1 PD Chế độ Power Down. Khi PD=’1’ sẽ làm cho tất cả các dao động trong chip dừng hẳn, điều khiển wakeup sẽ làm cho hệ thống khởi động lại, xóa PD và phục hồi các lệnh. 0 7:2 Dự trữ Dự trữ, không được sử dụng NA Bảng 17: Thanh ghi điều khiển nguồn PCON 7.3. Thanh ghi điều khiển nguồn cho ngoại vi(PCONP-0xE01FC0C4): Dương Huỳnh Bảo_DD04KSTN PCONP Tên chức năng Diễn tả chức năng Giá trị Reset 0 Dự trữ Dự trữ, không được sử dụng 0 1 PCTIM0 PCTIM0=’1’, TIMER0 được sử dụng-PCTIM0=’0’, không sử dụng TIMER0 1 2 PCTIM1 Tương tự với TIMER1 1 3 PCURT0 PCURT0=’1’, UART0 được sử dụng-PCURT0=’0’, không sử dụng UART0. 1 4 PCURT1 PCURT1=’1’, UART1 được sử dụng-PCURT1=’0’, không sử dụng UART1 1 5 PCPWM0 PCPWM0=’1’, PWM0 được sử dụng-PCPWM0=’0’, không sử dụng PWM0 1 6 Dự trữ Dự trữ, không được sử dụng 0 7 PCI2C PCI2C =’1’, giao tiếp I2C được sử dụng- PCI2C =’0’ không sử dụng giao tiếp I2C 1 8 PCSPI0 Tương tự với giao tiếp SPI0 1 9 PCRTC Tương tự với RTC 1 10 PCSPI1 Tương tự với giao tiếp SPI1 1 11 PCEMC Tương tự với EMC (điều khiển bộ nhớ ngoài 1 12 PCAD Tương tự với bộ biến đổi ADC 1 31:13 Dự trữ Dự trữ, không được sử dụng NA Bảng 18: Thanh ghi điều khiển nguồn cho ngoại vi 8. Reset: Có 2 nguồn tạo reset hệ thống: trên chân RESET và từ đồng hồ Watchdog . Tín hiệu Reset hợp lý sẽ khởi động đồng hồ Wakeup Timer. Với quá trình POR, chân Reset cần phải giữ mức trong vòng 10ms, với quá trình Reset ngoài bình thường khi MCU đang hoạt động, chỉ cần 300ns. Sau quá trình Reset, vi xử lý bắt đầu thực thi lệnh tại vùng địa chỉ 0x0000 0000. Vector ngắt được định vùng địa chỉ ở khối Boot, giá trị của các thanh ghi được khởi tạo ở những giá trị định nghĩa trước. Quá trình Reset ngoài và reset trong có chút ít khác biệt, đó là do thời điểm Reset ngoài ta hoàn toàn biết được, còn Reset trong ta không biết khi nào thì nó xảy ra. Bởi vậy, với quá trình Reset ngoài, ta có thể chủ động đưa nó vào các chế độ hoạt động mong muốn bằng cách kết nối ngoại vi, và phần mềm. Hình 7: Giản đồ khối reset bao gồm cả đồng hồ Wakeup 9. Bộ chia VPB: Dương Huỳnh Bảo_DD04KSTN Bộ chia VPB cho biết mối quan hệ giữa xung nhịp hệ thống (CCLK) và xung nhịp của ngoại vi (PCLK). Bộ chia VPB có 2 nhiệm vụ: Ngoại vi có thể hoạt động với một tần số thích hợp mong muốn theo CCLK.(1/4, 1/2) Bộ chia VPB cho phép tiết kiệm nguồn khi ứng dụng không đòi hỏi các ngoại vi phải hoạt động ở tần số của vi xử lý. Vì bộ chia VPB nối kết với ngõ ra PLL nên nó vẫn hoạt động ở chế độ Idle. 9.1. Thanh ghi của bộ chia VPB (VPBDIV - 0xE01FC100): Địa chỉ Tên Chức năng Truy cập 0xE01FC100 VPBDIV Điều khiển tốc độ tương đối của xung nhịp VPB so với xung nhịp vi xử lý. Đọc/Ghi Bảng 19: Thanh ghi VPBDIV VPBDIV Tên chức năng Diễn tả chức năng Giá trị Reset 1:0 VPBDIV VPBDIV [1:0]=’00’àTốc độ xung nhịp VPB=1/4 xung nhịp hệ thống. VPBDIV [1:0]=’01’à Tốc độ xung nhịp VPB= xung nhịp hệ thống. VPBDIV [1:0]=’10’à Tốc độ xung nhịp VPB= ½ xung nhịp hệ thống. VPBDIV [1:0]=’11’à Không được định nghĩa. Nếu ghi giá trị này vào 2 bit tương ứng, nó không có tác dụng, và giá trị trước được sử dụng. 0 3:2 Dự trữ Dự trữ, không được sử dụng 0 5:4 XCLKDIV Điều khiển xung nhịp có thể được lấy ra chân A23/XCLK. Nó có giá trị giống như 2 bit VPBDIV. Phải chọn chân A23 là ngõ ra xung nhịp, định nghĩa chức năng ở thanh ghi PINSEL2 7:6 Dự trữ Dự trữ, không được sử dụng 0 Bảng 20: Thanh ghi bộ chia VPB (VPBDIV - 0xE01FC100) Hình 8: Kết nối của bộ chia VPB với PLL 10. Wakeup Timer: Nhiệm vụ của đồng hồ Wake-up là đảm bảo rằng nguồn dao động và các chức năng analog đã hoạt động đầy đủ trước khi cho phép vi xử lý bắt đầu thực thi các chỉ lệnh chương trình. Đồng hồ Wake-up kiểm soát hoạt động của tinh thể dao động, nghĩa là điều kiện an toàn đủ cho code chương trình bắt đầu thực thi. Khi nguồn cung cấp vào chip, hoặc làm cho chip hoạt động lại từ chế độ Power down, đồng hồ wakeup kiểm tra xem khi nào tinh thể dao động bắt đầu có chu kì xung nhịp hoạt động ổn định, khi đó, nó đếm thêm 4096 chu kì xung nhịp nữa và bắt đầu khởi tạo bộ nhớ Flash, khởi tạo xong, nó bắt đầu cho phép chương trình mã nguồnhoạt động <nếu như chân Reset ngoài không còn tích cực> LPC2214 không có các chức năng analog (như so sánh) nên tất cả các hoạt động đều cần đến xung nhịp đồng bộ, tuy nhiên, các chân ngắt ngoài có thể đảm nhận chức năng Wake-up lại hệ thống từ Power-down. Dương Huỳnh Bảo_DD04KSTN và thật sự, các ngắt này chỉ thực thi sau khi Wake-up hệ thống thành công <các ngắt được giữ lại trong vector điều khiển ngắt-VIC> Tương tự, các chức năng ngoại vi khác như I2C, SPI, UART cũng có khả năng wake-up hệ thống từ Power-down. C. Bộ điều khiển vector ngắt(VIC): 1. Chức năng: Bộ điều khiển vector ngắt ARM PrimeCell™ 32 nguồn ngắt 16 vector yêu cầu ngắt 16 mức ưu tiên ngắt Tạo ngắt phần mềm. 2. Diễn giải: Bộ điều khiển vector ngắt (VIC) có 32 nguồn ngắt, thuộc 3 loại: FIQ, yêu cầu ngắt (IRQ) có vector, yêu cầu ngắt (IRQ) không có vector: v FIQ: Yêu cầu ngắt nhanh có mức ưu tiên cao nhất, nếu có nhiều hơn 1 yêu cầu FIQ, phép OR VIC Sẽ đề cập chi tiết hơn ở phần tìm hiểu và sử dụng các chức năng của ARM7 LPC2xxx Bộ điều khiển vector ngắt (VIC) có 32 nguồn ngắt, thuộc 3 loại: FIQ, yêu cầu ngắt (IRQ) có vector, yêu cầu ngắt (IRQ) không có vector: v FIQ: Yêu cầu ngắt nhanh có mức ưu tiên cao nhất, nếu có nhiều hơn 1 yêu cầu FIQ, phép OR VIC 3. Các thanh ghi điều khiển ngắt: STT Loại Mô tả 1 VICIRQStatus Đọc về trạng thái của những yêu cầu ngắt IRQ đã được cho phép hoạt động 2 VICFIQStatus Đọc về trạng thái của những yêu cầu ngắt FIQ đã được cho phép hoạt động 3 VICRawIntr Đọc về trạng thái của 32 yêu cầu ngắt bất chấp nó đã được cho phép hoạt động hay chưa 4 VICIntSelect Chọn nguồn ngắt đã được cho phép là IRQ hay FIQ.Ghi 1 vào các bit tương ứng với 32 nguồn ngắt sẽ thiết lập ngắt đó là FIQ.Ghi 0 là IRQ.Mặc định IRQ 5 VICEnable Các bit trong thanh ghi này tương ứng với từng nguồn ngắt trong 32 nguồn ngắt. Muốn ngắt nào được cho phép hoạt động thì ghi 1 vào bit đó.Ghi 0 không có hiệu lực 6 VICEnClr Cho phep xóa bit 1 hay nhiều bit trong VICEnable để không cho phép ngắt đó haot5 động 7 VICSoftInt Nếu bit tương ứng được ghi 1 thi ép ngắt đó xảy ra 8 VICSoftIntClear Cho phép phần mềm xóa các ngắt tương ứng ơ VICSoftInt Dương Huỳnh Bảo_DD04KSTN 9 VICProtection Hạn ché lại phạm vi cho phep phần mểm có thể truy suất các thanh ghi VIC 10 VICVectAddr Chứa địa chỉ của chương trình phụ vụ ngắt IRQ để PC có thể nhay tới khi ngắt xảy ra 11 VICDefVectAddr Giữ dịa chỉ của chương trình phục vụ ngắt(ISR) của non_vectorIRQ 11 VICVectAddr0 tới 15 Giữ địa chỉ của ISR của ngắt IRQ 12 VICVectCntl0 tới 15 Điều khiển tương ứng mỗi một VICVectAddr thứ i nào đó chưa ISR phục vụ cho nguồn ngắt nào trong 16 nguồn ngắt IRQ 4. Các bươc thực hiện 1 chương trình ngắt: 4.1 Đối với ngắt FIQ: Nó có độ ưu tiên cao nhất .Theo khuyến cáo thì trong chương trình chỉ nên có 1 nguồn ngắt FIQ được yêu cầu. Trong chương trình Keil CARM thì chỉ khai báo 1 nguồn ngắt FIQ .Nhưng nếu có hơn 1 ngắt FIQ thì ARM thực hiện phép ORED. Và để biết được nguồn ngắt nào bị tác động thì trong FIQ ISR ta đọc VICFIQStatus. vi dụ Keil C : ………………….. Void ham_ngat(void)__fiq; ………… main() {…… VICIntSelect=0x…..//chọn nguồn ngắt là FIQ nếu bit tương ứng =1 //nếu không tác động thì default la IRQ va non IRQ VICIntEnable=0x…//bit tương ứng với nguồn ngắt =1 thi cho phép nó enable … } Void ham_ngat(void)__fiq { Kiểm tra FIQVICStatus xem ngắt nào được thực thi, và thực thi nhiệm vụ của ngắt đó } 4.2 Đối với ngắt IRQ : Ngắt vecto có độ ưu tiên nhỏ hơn ngắt FIQ.Và nếu cùng loại ngắt IRQ thì nó cũng có độ ưu tiên khác nhau tùy theo địa chỉ mà chương trình phục vụ ngắt đó chiếm trong dải các thanh ghi VICVecAddrx(x=0..15) mà có độ ưu tiên thấp dần từ x= 0->15 Các bước thực hiện chương trình bằng KEIL C ………………….. Void ham_ngat1(void)__irq; Void ham_ngat2(void)__irq; //nếu chuong trình sử dụng nhiều ngắt Irq …… main() {…… VICIntSelect=0x…..//chọn nguồn ngắt là FIQ nếu bit tương ứng =1 //nếu không tác động thì default la IRQ va non IRQ Dương Huỳnh Bảo_DD04KSTN //để chon là IRQ thì nó phải bằng 0 VICVectCtrlx=0x…. ; //kiểm soát slot thứ x ưng với VICVectAddrx , 4 bit đầu của thanh ghi này tương ứng với số thứ tự nguồn ngắt(VIC chanel#).Nó dùng để chọn nguồn ngắt nào được phục vụ bởi chương trình ISR có địa chỉ chứa trong VICVectAddrx. Bit thứ 5 Enable Slot thứ x nếu =1 VICVectAddrx= (unsigned)ham_ngatx; VICIntEnable=0x…//bit tương ứng với nguồn ngắt =1 thi cho phép nó enable … } Void ham_ngat1(void)_irq Dương Huỳnh Bảo_DD04KSTN Void ham_ngat2(void)_irq 4.3 Đối với ngắt non IRQ : Ngắt này có độ ưu tiên thấp nhất.Trong chương trình chỉ khai báo 1 trình phục vụ ngắt cho non IRQ(giống ngắt FIQ). Rồi sau đó trong ISR tiến hành kiểm tra xem nguồn ngắt nào được thực hiện bằng VICIRQstatus. Các bước thực hiện chương trình Keil C Void ham_ngat(void)_irq; //chi có 1 ngắt non IRQ Main() { … VICIntSelect =0x..//(bit tuong ung phai la 0 để là non IRQ) VICDefVectAddr=(unsigned) ham_ngat; VICIntEanble=0x.. ;//cho phep ngat tuong ung } Void ham_ngat(void)_irq {Kiểm tra nguồn ngắt nào được thực hiện bằng VICIRQstatus. Chương trình phục vụ ngắt tương ứng } Chú ý: Các việc cần làm trước khi rời khỏi ISR Xóa cờ ngắt tương ứng với nguồn ngắt được thự thi; VICVectAddr=0; D. Sử dụng các thanh ghi xuất nhập đa dụng: (GPIO): Đa số các chân mặc định là GPIO sau khi reset.Khi sử dụng chức năng này ta có thể xuất nhập dữ liệu số , để điều khiển các ngoại vi như động cơ, led,hay button…. Các thanh ghi: Slow GPIO register STT Loại Mô tả 1 IODIR0 va IODIR1 Chọn hướng xuất nhập cho từng PIN của PORT0 và PORT1 ứng với từng bit : nbit=1 output pin, nbit=0 input Pin 2 IOCLR0 và IOCLR1 Đưa Pin tuong ưng với bit =1 trong thanh ghi này xuống mức thấp khi đã thiết lập là Output pin 3 IOSET0 và IOSET1 Đưa Pin tuong ưng với bit =1 trong thanh ghi này lên mức cao khi đã thiết lập là Output pin 4 IOPIN0 và IOPIN1 Xuất /nhập nguyên 1 word ra PORT0 or PORT1 Tương tự đối với Fast GPIO: STT Loại Mô tả 1 FIODIR0 vaF IODIR1 Chọn hướng xuất nhập cho từng PIN của PORT0 và PORT1 ứng với từng bit : nbit=1 output pin, nbit=0 input Pin 2 FIOCLR0 và Đưa Pin tuong ưng với bit =1 trong thanh ghi này Dương Huỳnh Bảo_DD04KSTN FIOCLR1 xuống mức thấp khi đã thiết lập là Output pin 3 FIOSET0 và FIOSET1 Đưa Pin tuong ưng với bit =1 trong thanh ghi này lên mức cao khi đã thiết lập là Output pin 4 FIOPIN0 và FIOPIN1 Xuất /nhập nguyên 1 word ra PORT0 or PORT1 E. Sử dụng ADC Khác với LPC2148 (có 2 bộ ADC mỗi bộ có 8 kênh làm việc độc lập) ,LPC2214 có 8 kênh ADC chỉ có thể cho phep từng kênh một khi hoạt động. Các đặc điểm chính: ARM LPC của Philipps 10 bit và thời gian chuyển đối có thể đạt tới 2.44us Tầm đo từ 0->3V Xung CLK có thể đạt tới 4.5Mhz Các thanh ghi chức năng cơ bản: STT Tên Mô tả 1 ADCR Chọn chế độ hoạt động cho ADC trước khi ADC bắt đầu chuyển đổi 2 ADDR Chứa kết quả chuyển đổi ADC Các bit cụ thể trong thanh ghi Thanh ghi ADCR Bit Tên Mô tả 7:0 SEL Chọn kênh cho ADC 15:8 CLKDIV Chia xung PCLK/( CLKDIV+1) làm xung CLK cho ADC 16 BURST START =000 khi BURST=1 nếu không thì ADC không hoạt động 19:17 CLKS 000 001 010 011 100 101 110 111 Chọn xung số xung CLK ứng với số bit chuyển đổi 11 clock/10bit chuyển đổi 10 clock/9bit chuyển đổi 9 clock/8bit chuyển đổi 8 clock/7bit chuyển đổi 7 clock/6bit chuyển đổi 6 clock/5bit chuyển đổi 5 clock/4bit chuyển đổi 4 clock/3bit chuyển đổi 21 PDN =1:ADC done =0 :ADC không hoạt động 23:22 TEST1:0 những bit này được sử dụng để chọn ở chế độ test hoạt động 00=normal operation, 01=digital test mode, 10=DACest mode, and 11=simple conversion test mode. 26:24 START 000 001 Không start Bắt đầu chuyển đổi Dương Huỳnh Bảo_DD04KSTN 010 011 100 101 110 111 Bắt đầu chuyển đổi khi có tác động cạnh bit 27 on P0.16/EINT0/MAT0.2/CAP0.2 Bắt đầu chuyển đổi khi có tác động cạnh bit 27 on P0.22/CAP0.0/MAT0.0 Bắt đầu chuyển đổi khi có tác động cạnh bit 27 on MAT0.1 Bắt đầu chuyển đổi khi có tác động cạnh bit 27 on MAT0.3 Bắt đầu chuyển đổi khi có tác động cạnh bit 27 on MAT1.0 Bắt đầu chuyển đổi khi có tác động cạnh bit 27 on MAT1.1 27 EDGE Chọn tác động cạnh lên hay canh xuống ở mỗi tác động trên:=0 cạnh lên ;=1 canh xuống Thanh ghi ADDR Bit Tên Mô tả 5:0 Luôn luôn được đọc là zero(dự trữ) 15:6 V/V3A Chứa Data chuyển đổi dùng đọc kết quả chuyển đổi 23:16 Những bit này luôn được đọc là zero 26:24 CHN Chứa số thứ tự của kênh ADC vừa hoàn thành chuyển đổi 29:27 Những bit này luôn được đọc là zero 30 OVERUN Bit này 1 trong BURST mode khi mà có nhiều hơn 1 kết quả ADC chuyển đổi hoàn thành và ghi chồng lên kết quả trước đó gây mất dữ liệu lần chuyển đổi trước 31 DONE Báo hiệu hoàn thành 1 lần chuyển đổi bit này tự động xóa khi đọc ADDR F. UART0 và UART1: F.1Chức năng: Thu phát 16 bit FIFOs. Vùng thanh ghi hợp chuẩn công nghiệp 550 Nhận điểm ngắt FIFO tại 1,4,8 và 14 bytes Tích hợp sẵn bộ sinh tốc độ Baud. F.2Diễn tả các chân chức năng: Tên chân Hướng truyền Chức năng RxD0 Vào Serial Input. Nhận dữ liệu nối tiếp. TxD0 Ra Serial Output. Truyền dữ liệu nối tiếp. F.3Diễn tả các thanh ghi chức năng: UART0 có 10 thanh ghi chức năng 8 bit. F.3.1Thanh ghi đệm truyền thu : U0RBR là byte trên cùng của UART0 Rx FIFO, byte này chứa các kí tự truyền nhận sau cùng và có thể đọc được nhờ bus giao tiếp. Bit 0 (LSB) là bit cuối cùng của dữ Dương Huỳnh Bảo_DD04KSTN liệu nhận, nếu kí tự truyền nhận ít hơn 8 bit, các bit cao của thanh ghi này sẽ tự cập nhật giá trị ‘0’ Bit DLAB(Divisor Latch Access Bit) trong thanh ghi U0LCR phải bằng 0 để có thể truy cập U0RBR. Thanh ghi đệm của truyền thu là thanh ghi chỉ đọc. U0RBR Chức năng Giải thích chức năng Giá trị Reset 7:0 Thanh ghi đệm truyền thu Thanh ghi đệm truyền thu chứa byte thu nhận sau nhất của UART0 Rx FIFO Không biết F.3.2Thanh ghi giữ giá trị truyền phát: Thanh ghi U0THR là thanh ghi chứa byte trên cùng của UART Tx FIFO. Thanh ghi này chứa kí tự gần nhất của quá trình truyền phát FIFO, có thể ghi giá trị vào thanh ghi này thông qua giao tiếp bus. Bit LSB là bit đầu tiên sẽ được truyền phát. Bit DLAB trong thanh ghi U0LCR phải bằng 0 để có thể truy cập U0THR. Thanh ghi đệm của truyền thu là thanh ghi chỉ được phép ghi. U0THR Chức năng Giải thích chức năng Giá trị Reset 7:0 Thanh ghi giữ giá trị truyền phát Ghi giá trị vào thanh ghi giữ giá trị truyền thu UART0 thì byte đó sẽ được xếp sau cùng vào FIFO. N/A +Thanh ghi UART0 Divisor Latch LSB (U0DLL - 0xE000C000) truy cập được khi DLAB = 1. +Thanh ghi UART0 Divisor Latch MSB (U0DLM - 0xE000C004) truy cập được khi DLAB = 1. +UART0 Divisor Latch là số chia của bộ tạo tốc độ Baud và giá trị của nó được dùng để chia xung clock VPB (PCLK-Xung nhịp hoạt động của ngoại vi) thành tốc độ baud, tốc độ xung nhịp ngoại vi bằng 16x tốc độ baud mong muốn. Hai thanh ghi U0DLL và U0DLM lập thành số chia 16 bit, U0DLL chứa 8 bit thấp và U0DLM chứa 8 bit cao. Giá trị U0DLM-U0DLL = 0x0000 được xem như 0x0001 <vì giá trị chia cho 0 không tồn tại> Bit DLAB=1 để có thể truy cập UART0 Divisor Latches. U0DLL Chức năng Giá trị Reset 7:0 Byte thấp của bộ chia sinh tốc độ baud 0x01 Bảng 21: Byte thấp bộ chia sinh tốc độ baud cho UART0 (U0DLL-0xE000C000 khi DLAB=1) U0DLM Chức năng Giá trị Reset 7:0 Byte cao của bộ chia sinh tốc độ baud 0x00 Nói một cách vắn tắt, để thiết lập tốc độ baud mới, phải cho bit DLAB=’1’,truy cập các thanh ghi U0DLM- U0DLL, khi cho DLAB=’0’, khởi tạo bộ tạo tốc độ Baud. Và lúc đó, mới có thể truy cập các giá trị từ bộ đêm thu hoặc bộ giữ phát của UART0. F.3.3Thanh ghi cho phép ngắt truyền thông nối tiếp : Thanh ghi U0IER được dùng để cho phép các ngắt của UART0(4 nguồn ngắt). U0IER Chức năng Diễn giải các chức năng Giá trị Reset 0 Cho phép ngắt RBR o U0IER[0] = ’0’: Không cho phép ngắt RDA. o U0IER[0] = ’1’: Cho phép ngắt RDA Bit này cũng điều khiển ngắt do thời gian chờ truyền nhận kí tự bị Time-out. 0 Dương Huỳnh Bảo_DD04KSTN 1 Cho phép ngắt THRE o U0IER[1] = ’0’: Không cho phép ngắt THRE. o U0IER[1] = ’1’: Cho phép ngắt THRE Trạng thái của bit ngắt này có thể được đọc từ thanh ghi U0LSR[5]. 0 2 Cho phép ngắt từ đường trạng thái Rx o U0IER[2] = ’0’: Không cho phép ngắt trạng thái đường Rx o U0IER[2] = ’1’: Cho phép ngắt trạng thái đường Rx bị lỗi. Trạng thái của bit ngắt này có thể được đọc từ thanh ghi U0LSR[4:1] 0 7:3 Dự trữ Dự trữ, không được sử dụng NA F.3.4Thanh ghi nhận dạng ngắt truyền thông nối tiếp: U0IIR Chức năng Diễn giải các chức năng Giá trị Reset 0 Chờ ngắt o U0IIR[0] = ’0’: Có ít nhât 1 ngắt đang chờ o U0IIR[0] = ’1’: không có ngắt nào đang chờ Lưu ý rằng U0IIR0 tích cực ở mức thấp. Các trạng thái ngắt có thể được diễn tả bởi các giá trị trong 3 bit trạng thái U0IER3:1. 1 3:1 Nhận dạng ngắt o U0IIR[3:1] = ’011’: Có ngắt do trạng thái đường truyền UART lên mức tích cực(RLS). o U0IIR[3:1] = ’010’ 2a: Báo hiệu dữ liệu nhận sẵn sàng o U0IIR[3:1] = ’110’ 2b: Báo hiệu thời gian chờ truyền nhận kí tự bị Time-out. (CTI) o U0IIR[3:1] =’001’ 3: Ngắt THRE o Các tổ hợp bit khác đều không hợp lệ. U0IER[3:1] nhận dạng ngắt đáp ứng với UART0 Rx FIFO. 0 5:4 Dự trữ Dự trữ, không được sử dụng NA 7:6 Cho phép FIFO 2 bit này tương đương với U0FCR0. 0 Các thường trình ngắt được đề cập ở bảng sau. Biết các giá trị của U0IIR[3:0], thường trình ngắt có thể biết nguồn sinh ngắt và cách để xóa ngắt đó. Thanh ghi U0IIR phải được đọc để xóa các ngắt ưu tiên và thoát khỏi thường trình ngắt. Ngắt do đường truyền nhận UART bị lỗi là ngắt có độ ưu tiên cao nhất và nó có thể tích cực khi 1 trong 4 nguyên nhân gây lỗi Rx xuất hiện: lỗi tràn(OE), sai parity(PE), sai framing(FE) và break interrupt (BI). Điều kiện gây lỗi UART0 Rx tạo ngắt có thể được biết nhờ tổ hợp bit U0LSR[4:1]. Thường trình ngắt sẽ xóa các bit này ngay sau khi đọc U0LSR. Ngắt RDA (U0IIR3:1=010) cùng mức ưu tiên (mức 2) với ngắt CTI(U0IIR3:1=110). Ngắt RDA tích cực khi UART Rx FIFO bằng mức kích định nghĩa bởi U0FCR[7:6] và nó được xóa nhờ UART0 Rx FIFO xuống thấp hơn mức kích. Khi ngắt này tích cực, CPU có thể đọc khối dữ liệu được định nghĩa bởi mức kích. Ngắt CTI tích cực khi khi UART0 Rx FIFO chứa ít nhất 1 kí tự và không có UART0 Rx FIFO tích cực xuất hiện trong khoảng thời gian truyền 3.5 đến 4.5 kí tự. Nguồn ngắt UART0 Rx FIFO tích cực (đọc hoặc ghi UART0 RSR) sẽ xóa ngắt này. Thường trình phục vụ ngắt UART0 RBR sẽ hoàn tất khi dữ liệu truyền thông đã được nhận mà không vi phạm các mức kích. Ví dụ: Ngoại vi cần nhận 105 kí tự và mức kích ở 10 kí tự, CPU sẽ nhận được 10 ngắt RDA (tức là 100 kí tự) còn lại 5 kí tự chưa được nhận, sẽ sinh ra ngắt CTI, và mức kích cần phải điều chỉnh (ở 1 đến 5 kí tự) để hoàn tất quá trình truyền nhận. Dương Huỳnh Bảo_DD04KSTN U0IIR[3:0] Mức ưu tiên Loại ngắt Nguồn ngắt Điều kiện để xóa ngắt 0001 - không không - 0110 Cao nhất Lỗi trên đường truyền nhận Rx OE hoặc PE hoặc FE hoặc BI U0LSR được đọc 0100 Mức 2 Dữ liệu Rx đã sẵn sàng Dữ liệu Rx đã sẵn sàng hoặc (U0FCR0=1) U0RBR được đọc hoặc UART0 FIFO xuống dưới mức kích 1100 Mức 2 Báo hiệu thời hạn truyền nhận bị Time-out Thời gian Time-out = [(word length)x7 - 2]x8 + {(mức kích – số kí tự)x8 + 1] RCLKs U0 RBR được đọc 0010 Mức 3 THRE THRE U0IIR được đọc(nếu là nguồn ngắt) hoặc ghi vào THR Các giá trị U0IIR[3:0] = {"0000", “0011”, “0101”, “0111”, “1000”, “1001”, “1010”, “1011”,”1101”,”1110”,”1111”} đều không hợp lệ Ngắt UART0 THRE(U0IIR3:1=001) có mức ưu tiên thứ 3 và được tích cực khi UART0 THR FIFO được làm rỗng. F.3.5 Thanh ghi điều khiển FIFO cho truyền thông nối tiếp: Thanh ghi này điều khiển hoạt động của bộ FIFO Rx và Tx. U0FCR Chức năng Giải thích Giá trị Reset 0 Cho phép FIFO Tích cực mức cao sẽ cho phép truy cập UART0 Rx, Tx FIFOs và U0FCR[[7:1]. Bit này phải được cho bằng 1 để UART0 hoạt động đúng. Sự chuyển đổi trên bit này sẽ tự động xóa bộ UART0 FIFOs. 0 1 Reset FIFO Rx Ghi mức 1vào bit U0FCR[1] sẽ xóa tất cả các byte hiện đang lưu trữ trên UART0 Rx FIFO và Reset con trỏ về vị trí hợp lý. Bit này có thể tự xóa. 0 2 Reset FIFO Tx Ghi mức 1vào bit U0FCR[2] sẽ xóa tất cả các byte hiện đang lưu trữ trên UART0 Tx FIFO và Reset con trỏ về vị trí hợp lý. Bit này có thể tự xóa. 0 5:3 Dự trữ Dự trữ, không được sử dụng NA 7:6 Chọn mức ngắt Rx 00: ngắt ở mức 0 (mặc định= truyền nhận 1 kí tự) 01: ngắt ở mức 1 (mặc định= truyền nhận 4 kí tự) 10: ngắt ở mức 2 (mặc định= truyền nhận 8 kí tự) 11: ngắt ở mức 3 (mặc định= truyền nhận 14 kí tự) Tổ hợp 2 bit này cho biết có bao nhiêu kí tự được nhận từ UART FIFO sẽ gây ngắt. 4 mức kích này có thể được định nghĩa bởi người lập trình tùy vào số kí tự ở bộ FIFO. 0 F.3.6 Thanh ghi điều khiển đường truyền cho truyền thông nối tiếp<U0LCR - 0xE000C00C>: Thanh ghi này cho biết dạng của kí tự dữ liệu truyền (phát hoặc nhận). U0LCR Chức năng Giải thích Giá trị Reset 1:0 Lựa chọn chiều dài từ 00: Kí tự dài 5 bit 01: Kí tự dài 6 bit 10: Kí tự dài 7 bit 11: Kí tự dài 8 bit 0 2 Chọn số Bit dừng 0: 1 stop bit 1: 2 stop bits (1.5 nếu U0LCR[1:0]=00) 0 3 Parity Enable 0: không cho phép tạo và kiểm tra parity 1: cho phép tạo và kiểm tra parity 0 Dương Huỳnh Bảo_DD04KSTN 5:4 Chọn Parity 00: parity lẻ 01: parity chẵn 10: gán “1” là parity 11: gán “0” là parity 0 6 l Break Control 0: Không cho phép dừng truyền dữ liệu 1: Cho phép dừng truyền dữ liệu Ngõ ra của chân UART0 TxD sẽ bj gán = 0 khi U0LCR6 tích cực mức cao. 0 7 Divisor Latch Access Bit 0: Không cho phép truy cập Divisor Latches 1: Cho phép truy cập Divisor Latches 0 F.3.7 Thanh ghi điều khiển trạng thái cho đường truyền cho truyền thông nối tiếp: Thanh ghi này cho biết trạng thái thông tin trên các khối UART0 Tx và Rx, thuộc tính chỉ đọc. U0LSR Chức năng Giải thích Giá trị Reset 0 Sẵn sàng nhận dữ liệu (RDR) 0: U0RBR rỗng. 1: U0RBR chứa các giá trị hợp lệ U0LSR0=’1’ khi U0RBR giữ các kí tự không đọc được và được xóa khi UART0 RBR FIFO được làm rỗng. 0 1 Lỗi tràn (OE) 0: Không bị tràn. 1: bị tràn Điều kiện lỗi tràn ngay lập tức sẽ đưa bit này lên tích cực, U0LSR được đọc sẽ xóa U0LSR[1]. U0LSR[1]=’1’ khi UART0 RSR nhận được kí tự mới trong khi bộ UART0 RBR FIFO đã đầy. Trong trương hợp này, UART0 RBR FIFO sẽ không ghi đè lên và giá trị muốn vào UART0 RSR sẽ bị mất. 0 2 Kiểm tra lỗi Parity(PE) 0: kiểm tra Parity không lỗi 1: kiểm tra Parity bị lỗi Khi bit parity từ kí tự nhận được bị lỗi, sẽ xuất hiện lỗi parity,U0LSR đọc và xóa U0LSR2. 0 3 Khung lỗi (FE) 0: Không có lõi khung 1: Lỗi khung. Khi bit dừng của kí tự truyền nhận=’0’. Lỗi khung xuất hiện.U0LSR đọc sẽ xóa bit này. 0 4 Ngắt dừng truyền thông nối tiếp(BI) 0: Trạng thái dừng ngắt truyền thông không tích cực 1: Trạng thái dừng ngắt truyền thông tích cực Khi RxD0 được giữ trong thời gian bằng 1 lần truyền kí tự (start, data, parity, stop), trạng thái ngắt truyền thông nối tiếp lên mức tích cực. Khi bit này lên mức tích cực, bộ nhận sẽ ở trạng thái rỗi (Idle). Bộ nhận sẽ bắt đầu hoạt động lại khi nào tất cả các bit(start, data, parity, stop) lên 1. U0LSR đọc sẽ xóa bit này. 0 5 Thanh ghi giữ giá trị truyền phát đã rỗng (THRE) 0: U0THR chứa dữ liệu hợp lệ 1: U0THR rỗng. THRE=’1’ ngay sau khi phát hiện UART0 THR rỗng và được xóa khi ghi dữ liệu vào U0THR 1 6 Quá trình truyền phát là rỗng (TEMT) 0: U0THR và/hoặc U0TSR chứa các dữ liệu hợp lệ 1: U0THR và U0TSR rỗng. TEMT=’1’ khi cả U0THR và U0TSR đều rỗng. TEMT được xóa khi U0TSR hoặc U0THR chứa các dữ liệu hợp lệ. 1 7 Lỗi do Rx FIFO (RxFE) 0: U0RBR không có lỗi UART0 Rx hoặc U0FCR0=0. 1: UART0 RBR có ít nhất 1 lỗi UART0 Rx . U0LSR[7]=’1’ khi kí tự với lỗi truyền nhận như lỗi khung, lỗi parity, hay ngắt dừng truyền thông được load vào U0RBR. Bit này sẽ được xóa khi thanh ghi U0LSR đọc và không có lỗi tương tự xuất hiện ở UART0 FIFO. 0 F.4 Kiến trúc của bộ truyền thông nối tiếp UART0: Dương Huỳnh Bảo_DD04KSTN Giao tiếp VPB cung cấp đường truyền thông giữa CPU hay host với UART0. Khối thu UART0: U0Rx, quản lý đường vào nối tiếp, RxD0, cho tín hiệu vào hợp lệ. thanh ghi dịch UART0 Rx (U0RSR) nhận các dữ liệu hợp lệ thông qua RxD0. Dương Huỳnh Bảo_DD04KSTN Sau khi các kí tự hợp lệ vào U0RSR, nó sẽ qua thanh ghi đệm UART0 Rx FIFO và chờ CPU hay máy chủ truy cập thông qua giao tiếp chung. Khối nhận UART0: U0Tx, cho phép dữ liệu từ CPU hay host được giữ ở bộ đệm dữ liệu UART0 Tx FIFO (U0THR). Thanh ghi dịch UART0 Tx(U0TSR) đọc dữ liệu chứa trong U0THR và tập hợp chúng để gởi qua chân TxD. Khối sinh tốc độ Baud UART0: U0BRG, tạo thời gian cho phép sử dụng khối UART0 Tx. Xung nhịp của U0BRG bắt nguồn từ xung nhịp của VPB(PCLK), NBAUDOUT = PCCK/16x với x=[ U0DLM-U0DLL]. Giao diện ngắt bao gồm 2 thanh ghi U0IER và U0IIR.

Các file đính kèm theo tài liệu này:

  • pdfĐề tài tìm hiểu vi điều khiển arm7 lpc2214.pdf