Giới thiệu về psoc

Tài liệu Giới thiệu về psoc: Tài liệu về PSoC – Bản quyền thuộc Nguyễn Xuân Sơn – ĐKTĐ1 – K44 – ĐHBKHN Giới thiệu về PSoC PSoC là một từ viết tắt của cụm từ tiếng anh Programmable System on Chip, nghĩa là hệ thống khả trình trên một chíp. Các chíp chế tạo theo công nghệ PSoC cho phép thay đổi đ−ợc cấu hình đơn giản bằng cách gán chức năng cho các khối tài nguyên có sẵn trên chíp. Hơn nữa nó còn có thể kết nối t−ơng đối mềm dẻo các khối chức năng với nhau hoặc giữa các khối chức năng với các cổng vào ra. Chính vì vậy mà PSoC có thể thay thế cho rất nhiều chức năng nền của một số hệ thống cơ bản chỉ bằng một đơn chíp. Thành phần của chíp PSoC bao gồm các khối ngoại vi số và t−ơng tự có thể cấu hình đ−ợc, một bộ vi xử lý 8 bit, bộ nhớ ch−ơng trình (EEROM) có thể lập trình đ−ợc và bộ nhớ RAM khá lớn. Để lập trình hệ thống, ng−ời sử dụng đ−ợc cung cấp một phần mềm lập trình, ví dụ nh− cho các chíp PSoC của Cypress ng−ời lập trình phải có phần mềm PSoC Designer. Ngoài ra để cài đ−ợc ch−ơng trình ...

pdf62 trang | Chia sẻ: hunglv | Lượt xem: 1239 | Lượt tải: 0download
Bạn đang xem trước 20 trang mẫu tài liệu Giới thiệu về psoc, để 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 về PSoC – Bản quyền thuộc Nguyễn Xuân Sơn – ĐKTĐ1 – K44 – ĐHBKHN Giới thiệu về PSoC PSoC là một từ viết tắt của cụm từ tiếng anh Programmable System on Chip, nghĩa là hệ thống khả trình trên một chíp. Các chíp chế tạo theo công nghệ PSoC cho phép thay đổi đ−ợc cấu hình đơn giản bằng cách gán chức năng cho các khối tài nguyên có sẵn trên chíp. Hơn nữa nó còn có thể kết nối t−ơng đối mềm dẻo các khối chức năng với nhau hoặc giữa các khối chức năng với các cổng vào ra. Chính vì vậy mà PSoC có thể thay thế cho rất nhiều chức năng nền của một số hệ thống cơ bản chỉ bằng một đơn chíp. Thành phần của chíp PSoC bao gồm các khối ngoại vi số và t−ơng tự có thể cấu hình đ−ợc, một bộ vi xử lý 8 bit, bộ nhớ ch−ơng trình (EEROM) có thể lập trình đ−ợc và bộ nhớ RAM khá lớn. Để lập trình hệ thống, ng−ời sử dụng đ−ợc cung cấp một phần mềm lập trình, ví dụ nh− cho các chíp PSoC của Cypress ng−ời lập trình phải có phần mềm PSoC Designer. Ngoài ra để cài đ−ợc ch−ơng trình điều khiển vào chíp thì ng−ời lập trình phải có một kit phát triển do hãng chế tạo chip cung cấp (hoặc một bộ nạp). Phần mềm thiết kế đ−ợc xây dựng trên cơ sở h−ớng đối t−ợng với cấu trúc module hóa. Mỗi khối chức năng là một module mềm. Việc lập cấu hình cho chíp nh− thế nào là tùy thuộc vào ng−ời lập trình thông qua một số th− viện chuẩn. Ng−ời lập trình thiết lập cấu hình trên chíp chỉ đơn giản bằng cách muốn chíp có những chức năng gì thi kéo chức năng đó và thả vào khối tài nguyên số hoặc t−ơng tự, hoặc cả hai tùy theo từng chức năng (Ph−ơng pháp lập trình kéo thả). Việc thiết lập ngắt trên chân nào, loại ngắt là gì, các chân vào ra đ−ợc hoạt động ở chế độ nh− thế nào đều tùy thuộc vào việc thiết lập của ng−ời lập trình khi thiết kế và lập trình cho PSoC. Với khả năng đặt cấu hình mạnh mẽ này, một thiết bị điều khiển, đo l−ờng có thể đ−ợc gói gọn trên một chip duy nhất. Chính vì lý do đó, hãng Cypress MicroSystems đã không gọi sản phẩm của mình là vi điều khiển (àC) nh− truyền thống, mà gọi là “thiết bị PSoC” (PSoC device), và họ hy vọng rằng, với khả năng đặt cấu hình mạnh mẽ, ng−ời sử dụng sẽ có đ−ợc những thiết bị điều khiển, những thiết bị đo có giá rẻ, kích th−ớc nhỏ gọn, và sản phẩm PSoC của họ sẽ thay thế đ−ợc các thiết bị dựa trên vi xử lý hoặc vi điều khiển đã có từ tr−ớc đến nay. Chíp PSoC (CY8C27xxx) cung cấp: • Bộ vi xử lý với cấu trúc Harvard. - Tốc độ của bộ vi xử lý lên đến 24 MHz - Lệnh nhân 8 bit x 8 bit, thanh ghi tích lũy là 32 bit - Hoạt động ở tốc độ cao mà năng l−ợng tiêu hao ít - Dải điện áp hoạt động từ 3.0 tới 5.25V - Điện áp hoạt động có thể giảm xuống 1.0 V sử dụng chế độ kích điện áp - Hoạt động trong dải nhiệt độ -400C đến 850C. • Các khối ngoại vi có thể đ−ợc sử dụng độc lập hoặc kết hợp ắ 12 khối ngoại vi t−ơng tự có thể đ−ợc thiết lập để làm các nhiệm vụ: - Các bộ ADC lên tới 14 bit - Các bộ DAC lên tới 9 bit. - Các bộ khuếch đại có thể lập trình đ−ợc hệ số khuếch đại. - Các bộ lọc và các bộ so sánh có thể lập trình đ−ợc 49 Tài liệu PSoC – biên dịch từ Datasheet bởi Nguyễn Xuân Sơn ĐKTĐ1 – K44 - ĐHBKHN Hình 3-1 : Sơ đồ khối cấu trúc của PSoC (CY8C27000) 50 Tài liệu về PSoC – Bản quyền thuộc Nguyễn Xuân Sơn – ĐKTĐ1 – K44 – ĐHBKHN ắ 8 khối ngoại vi số có thể đ−ợc thiết lập để làm các nhiệm vụ: - Các bộ định thời đa chức năng, đếm sự kiện, đồng hồ thời gian thực, bộ điều chế độ rộng xung có và không có dải an toàn (deadband) - Các modun kiểm tra lỗi (CRC modunles) - Hai bộ truyền thông nối tiếp không đồng bộ hai chiều - Các bộ truyền thông SPI Master hoặc Slave có thể cấu hình đ−ợc - Có thể kết nối với tất cả các chân vào ra. • Bộ nhớ linh hoạt trên chíp - Không gian bộ nhớ ch−ơng trình Flash từ 4K đến 16K, phụ thuộc vào từng loại chíp với chu kỳ ghi xóa cho bộ nhớ Flash là 50.000 lần - Không gian bộ nhớ RAM là 256 byte - Chíp có thể lập trình thông qua chuẩn nối tiếp (ISSP) - Bộ nhớ Flash có thể đ−ợc nâng cấp từng phần - Chế độ bảo mật đa năng, tin cậy - Có thể tạo đ−ợc không gian bộ nhớ Flash trên chíp lên tới 2,304 byte • Có thể lập trình đ−ợc cấu hình cho từng chân của chíp - Các chân vào ra ba trạng thái sử dụng Trigger Schmitt - Đầu ra logic có thể cung cấp dòng 25mA với điện trở treo cao hoặc thấp bên trong - Thay đổi đ−ợc ngắt trên từng chân - Đ−ờng ra t−ơng tự có thể cung cấp dòng tới 40mA - Đ−ờng ra đa chức năng có từ 6 đến 44 tùy thuộc vào từng loại chíp • Xung nhịp của chíp có thể lập trình đ−ợc - Bộ tạo dao động 24/48MHz ở bên trong (độ chính xác là 2,5%, không cần thiết bị ngoài) - Có thể lựa chọn bộ dao động ngoài lên tới 24MHz - Bộ dao động thạch anh 32,768 kHz bên trong - Bộ tạo dao động tốc độ thấp bên trong sử dụng cho Watchdog và Sleep • Ngoại vi đ−ợc thiết lập sẵn - Bộ định thời Watchdog và Sleep phục vụ chế độ an toàn và chế độ nghỉ - Module truyền thông I2C Master và I2C Slave tốc độ lên tới 400kHz - Module phát hiện điện áp thấp đ−ợc cấu hình bởi ng−ời sử dụng • Công cụ phát triển - Phần mềm phát triển miễn phí (PSoCTM Designer) - Bộ lập trình và bộ mô phỏng với đầy đủ tính năng - Mô phỏng ở tốc độ cao 51 Tài liệu PSoC – biên dịch từ Datasheet bởi Nguyễn Xuân Sơn ĐKTĐ1 – K44 - ĐHBKHN Ch−ơng 4: Cấu trúc Vi xử lý 1. Bộ vi xử lý – CPU 1.1. Giới thiệu chung Các họ chíp của PSoC dựa trên bộ vi xử lý mạnh mẽ 8 bit với cấu trúc Harvard (Cấu trúc Harvard là cấu trúc mà bus dữ liệu, bus địa chỉ và tín hiệu điều khiển của bộ nhớ ch−ơng trình và bộ nhớ dữ liệu độc lập với nhau). Nó có 5 thanh ghi điều khiển hoạt động chính của CPU. Những thanh ghi này bị tác động bởi những lệnh khác nhau. Ng−ời sử dụng không thể truy cập trực tiếp vào các thanh ghi này thông qua không gian bộ nhớ các thanh ghi. Các thanh ghi của CPU đ−ợc cho trong bảng sau: Bảng 4-1: Các thanh ghi của CPU Thanh ghi Mã gợi nhớ Flags (thanh ghi cờ) CPU_F Program Counter (thanh ghi đếm ch−ơng trình) CPU_PC Accumulator (thanh ghi chứa) CPU_A Stack Pointer (thanh ghi con trỏ Stack) CPU_SP Index (thanh ghi chỉ số) CPU_X Bộ đếm ch−ơng trình là một thanh ghi16 bit (CPU_PC), nó cho phép ng−ời lập trình truy cập trực tiếp vào toàn bộ không gian bộ nhớ ch−ơng trình trên chíp (16 Kbytes đối với thành viên lớn nhất). Đây là một không gian nhớ liên tục và không cần phải tạo thành trang (no paging). Thanh ghi chứa (Accumulator) là một thanh ghi đa mục đích, nó th−ờng đ−ợc sử dụng để l−u giữ kết quả của bất cứ một lệnh nào sử dụng chế độ địa chỉ nguồn. Thanh ghi chỉ số đ−ợc dùng để l−u giữ giá trị Offset (độ lệch) trong chế độ địa chỉ chỉ số. Tiêu biểu là nó đ−ợc dùng để địa chỉ một khối dữ liệu bên trong không gian nhớ dữ liệu. Thanh ghi Con trỏ Stack (Stack Pointer) l−u giữ địa chỉ của đỉnh Stack trong không gian nhớ dữ liệu. Nó bị tác động bởi những lệnh nh− PUSH, POP, LCALL, RETI và RET. Nói chung là tất cả những lệnh có liên quan đến stack của phần mềm. Nó cũng có thể bị ảnh h−ởng bởi lệnh SWAP và lệnh ADD. Thanh ghi cờ (Flags) có ba bit trạng thái: bit cờ không - Zero Flag bit[1]; bit cờ nhớ -Carry Flag bit[2]; bit Supervisory State[3]. Bit cho phép ngắt toàn cục – Global Interrupt enable bit[0] đ−ợc dùng để cho phép hoặc cấm toàn bộ các ngắt. Các cờ trên bị ảnh h−ởng bởi những lệnh toán học, những lệnh logic. v.v… 1.2. Thanh ghi của CPU 1.2.1. Thanh ghi cờ (Flags Register) Bảng 4-2: Thanh ghi cờ (CPU_F) Bit # 7 6 5 4 3 2 1 0 POR 0 0 0 0 0 0 1 0 Read/Write -- -- -- RW R RW RW RW Bit Name Reseved Reseved Reseved XIO Super Carry Zero Global IE Bit 7: Reserved (ch−a đ−ợc định nghĩa) Bit 6: Reserved Bit 5: Reserved Bit 4: XIO - đ−ợc đặt bởi ng−ời sử dụng cho phép lựa chọn giữa các dãy thanh ghi 52 Tài liệu về PSoC – Bản quyền thuộc Nguyễn Xuân Sơn – ĐKTĐ1 – K44 – ĐHBKHN 0 = Bank 0 1 = Bank 1 Bit 3: Reserved Bit 2: Carry - đ−ợc đặt bởi CPU để chỉ rõ toán tử trong phép toán logic hoặc toán học tr−ớc đó có nhớ hay không 0 = No Carry (không có nhớ) 1 = Carry (có nhớ) Bit 1: Zero - đ−ợc đặt bởi CPU để chỉ rõ toán tử trong phép toán logic hoặc toán học tr−ớc đó có bằng không hay không. 0 = Not Equal to Zero (không bằng không) 1 = Equal to Zero (bằng không) Bit 0: Global IE – Quyết định toàn bộ các ngắt là cho phép hay bị cấm 0 = Disabled (cấm) 1 = Enabled (cho phép) 1.2.2. Thanh ghi chứa Bảng 4-3: Thanh ghi chứa (CPU_A) Bit # 7 6 5 4 3 2 1 0 POR 0 0 0 0 0 0 0 0 Read/Write System1 System1 System1 System1 System1 System1 System1 System1 Bit Name Data[7] Data[6] Data[5] Data[4] Data[3] Data[2] Data[1] Data[0] Bit [7:0]: 8 bit dữ liệu l−u giữ kết quả của bất cứ một lệnh toán học/logic sử dụng chế độ địa chỉ nguồn Chú ý: POR (Power on reset): Trạng thái của bít sau khi reset nguồn. System1: do hệ thống điều chỉnh, ng−ời dùng không thể thay đổi trực tiếp đ−ợc giá trị của những bit này 1.2.3. Thanh ghi chỉ số Bảng 4-4: Thanh ghi chỉ số (CPU_X) Bit # 7 6 5 4 3 2 1 0 POR 0 0 0 0 0 0 0 0 Read/Write System1 System1 System1 System1 System1 System1 System1 System1 Bit Name Data[7] Data[6] Data[5] Data[4] Data[3] Data[2] Data[1] Data[0] Bit [7:0]: 8 bit dữ liệu l−u giữ chỉ số cho bất cứ một lệnh nào sử dụng chế độ địa chỉ chỉ số 1.2.4. Thanh ghi con trỏ Stack Bảng 4-5: Thanh ghi con trỏ Stack (CPU_SP) Bit # 7 6 5 4 3 2 1 0 POR 0 0 0 0 0 0 0 0 Read/Write System1 System1 System1 System1 System1 System1 System1 System1 Bit Name Data[7] Data[6] Data[5] Data[4] Data[3] Data[2] Data[1] Data[0] Bit [7:0]: 8 bit dữ liệu l−u giữ giá trị con trỏ stack hiện thời (trỏ vào đỉnh của stack) 1.2.5. Thanh ghi bộ đếm ch−ơng trình Bảng 4-6: Thanh ghi bộ đếm ch−ơng trình (CPU_PC) Bit# 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 POR 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Read/ write 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 Bit Name Data [15] Data [14] Data [13] Data [12] Data [11] Data [10] Data [9] Data [8] Data [7] Data [6] Data [5] Data [4] Data [3] Data [2] Data [1] Data [0] Bit[15:0]: 16 bit Dữ liệu là byte thấp và byte cao của bộ đếm ch−ơng trình 53 Tài liệu PSoC – biên dịch từ Datasheet bởi Nguyễn Xuân Sơn ĐKTĐ1 – K44 - ĐHBKHN Hình 4-1 : Cấu trúc liên kết của CPU với bộ nhớ (cấu trúc Harvard) 1.3. Định dạng của lệnh 1.3.1. Lệnh 1 byte Lệnh 1 byte là lệnh không dùng địa chỉ hay dữ liệu nh− toán hạng. lệnh 1 byte sử dụng một mã lệnh 8 bit ví dụ nh− RET,ASR,INC,DEC… Bảng 4-7 : Dạng lệnh 1 byte Byte 0 8- bit opcode 1.3.2. Lệnh 2 byte Lệnh 2 byte là lệnh dùng duy nhất một toán hạng là dữ liệu hay địa chỉ. Lệnh 2 byte sử dụng byte đầu tiên để chứa mã lệnh, byte thứ hai để chứa dữ liệu hoặc địa chỉ. Hoặc nó sử dụng 4 bit đầu cho mã lệnh và 12 bit sau cho địa chỉ. Bảng 4-8 : Dạng lệnh 2 byte Byte 0 Byte 1 4-Bit opcode 12-bit relative address 8-Bit opcode 8-bit data 8-Bit opcode 8-bit address 1.3.3. Lệnh 3 byte 54 Tài liệu về PSoC – Bản quyền thuộc Nguyễn Xuân Sơn – ĐKTĐ1 – K44 – ĐHBKHN Lệnh loại này sử dụng 3 byte bởi vì nó đ−ợc sử dụng để di chuyển dữ liệu giữa hai địa chỉ trong không gian địa chỉ mà ng−ời sử dụng có thể truy nhập. Hoặc nó dùng để l−u giữ một giá trị địa chỉ tuyệt đối 16 bit trong các lệnh LCALL và LJMP. Bảng 4-9 : Dạng lệnh 3 byte Byte 0 Byte 1 Byte 2 8-Bit opcode 16-bit address (MSB,LSB) 8-Bit opcode 8-bit data 8-bit data 8-Bit opcode 8-bit address 8-bit address 1.4. Các chế độ địa chỉ trong PSoC 1.4.1. Chế độ địa chỉ nguồn tức thời (Source Immediate) Những lệnh sử dụng chế độ địa chỉ này có giá trị nguồn đ−ợc l−u giữ trong toán hạng 1 của lệnh, kết quả đ−ợc l−u giữ trong thanh ghi A, thanh ghi F, thanh ghi SP hay thanh ghi X đ−ợc chỉ rõ trong lệnh. Lệnh sử dụng chế độ địa chỉ này có độ dài là 2 byte. Bảng 4-10 : Chế độ địa chỉ nguồn tức thời Opcode Operand 1 Instruction Inmediate Value Vídụ: Mã nguồn Mã máy Chú thích ADD A,7 01 07 Giá trị tức thời là 7 đ−ợc cộng vào thanh chứa, kết quả đ−ợc l−u vào thanh chứa MOV X,8 57 08 Giá trị tức thời là 8 đ−ợc chuyển vào thanh ghi X AND F,9 70 09 Giá trị tức thời là 9 đ−ợc AND với giá trị trong thanh ghi F, kết quả của phép AND đ−ợc đặt trong thanh ghi F 1.4.2. Chế độ địa chỉ nguồn trực tiếp (Source Direct) Trong chế độ này thì địa chỉ nguồn đ−ợc l−u giữ trong toán hạng 1 của lệnh. Trong suốt quá trình thi hành lệnh thì địa chỉ đ−ợc dùng để lấy giá trị nguồn từ RAM hoặc từ không gian địa chỉ thanh ghi. Kết quả đ−ợc chỉ rõ trong lệnh là đặt vào thanh ghi X hay thanh ghi A. Tất cả những lệnh sử dụng chế độ địa chỉ trực tiếp đều là lệnh có độ dài 2 byte. Bảng 4-11 : Chế độ địa chỉ nguồn trực tiếp Opcode Operand 1 Instruction Source Address Ví dụ: Mã nguồn Mã máy Chú thích ADD A,[7] 02 07 Giá trị trong bộ nhớ tại địa chỉ 7 đ−ợc cộng vào thanh chứa kết quả lại đ−ợc l−u giữ trong thanh chứa MOV X, REG[8] 5D 08 Giá trị trong không gian thanh ghi tại địa chỉ 8 đ−ợc chuyển vào thanh chứa 1.4.3. Chế độ địa chỉ nguồn chỉ số (Source Indexed) Trong chế độ này thì dữ liệu của nguồn đ−ợc truy xuất trong RAM hoặc không gian địa chỉ thanh ghi thông qua địa chỉ là giá trị hiện thời của thanh ghi X cộng với một chỉ số. Kết quả đ−ợc chỉ rõ trong lệnh là l−u giữ trong thanh ghi X hay thanh ghi A. Lệnh có độ dài là 2 byte Bảng 4-12 : Chế độ địa chỉ nguồn chỉ số Opcode Operand 1 55 Tài liệu PSoC – biên dịch từ Datasheet bởi Nguyễn Xuân Sơn ĐKTĐ1 – K44 - ĐHBKHN Instruction Source Index Ví dụ: Mã nguồn Mã máy Chú thích ADD A,[X+7] 03 07 Giá trị trong bộ nhớ tại địa chỉ X+7 đ−ợc cộng vào thanh chứa, kết quả lại đ−ợc l−u vào thanh chứa MOV X,[X+8] 59 08 Giá trị trong bộ nhớ tại địa chỉ X+8 đ−ợc di chuyển vào thanh ghi X 1.4.4. Chế độ địa chỉ đích trực tiếp (Destination Direct) Nh−ng lệnh thuộc chế độ địa chỉ này có địa chỉ đích đ−ợc l−u trữ trong mã máy của lệnh, địa chỉ nguồn đ−ợc chỉ rõ trong lệnh là thanh ghi A hay X. Tất cả những lệnh sử dụng chế độ địa chỉ này đều là lệnh 2 byte. Bảng 4-13 : Chế độ địa chỉ đích trực tiếp Opcode Operand 1 Instruction Destination Address Ví dụ: Mã nguồn Mã máy Chú thích ADD [7], A 04 07 Giá trị trong thanh chứa đ−ợc cộng với giá trị trong bộ nhớ tại địa chỉ 7, kết quả lại đ−ợc l−u vào bộ nhớ tại địa chỉ 7. Giá trị thanh chứa không đổi MOV REG[8], A 60 08 Giá trị trong thanh chứa đ−ợc di chuyển vào không gian thanh ghi tại địa chỉ 8. Giá trị thanh chứa không đổi. 1.4.5. Chế độ địa chỉ đích chỉ số (Destination Indexed) Những lệnh thuộc chế độ địa chỉ này có đích đ−ợc xác định bằng cách lấy giá trị của thanh ghi X cộng với một chỉ số làm địa chỉ để truy xuất vào bộ nhớ, nguồn đ−ợc xác định trong lệnh là thanh ghi A hoặc một giá trị tức thời. Những lệnh sử dụng chế độ địa chỉ này đều là lệnh có độ dài 2 byte. Bảng 4-14 : Chế độ địa chỉ đích chỉ số Opcode Operand 1 Instruction Destination Index Ví dụ: Mã nguồn Mã máy Chú thích ADD [X+7], A 05 07 Giá trị trong bộ nhớ tại địa chỉ X+7 đ−ợc cộng vào thanh chứa, kết quả đ−ợc l−u vào bộ nhớ tại địa chỉ X+7, thanh chứa không thay đổi 1.4.6. Chế độ địa chỉ đích trực tiếp, nguồn tức thời tức thời (Destination Direct, Source Immediate) Những lệnh thuộc chế độ địa chỉ này có địa chỉ của đích đ−ợc l−u giữ trong toán hạng 1 của lệnh. Giá trị của nguồn đ−ợc l−u trữ trong toán hạng 2 của lệnh. Tất cả những lệnh thuộc chế độ địa chỉ này đều là lệnh có độ dài 3 byte. Bảng 4-15 : Chế độ địa chỉ đích trực tiếp, nguồn tức thời Opcode Operand 1 Operand 2 Instruction Destination Address Immediate Value 56 Tài liệu về PSoC – Bản quyền thuộc Nguyễn Xuân Sơn – ĐKTĐ1 – K44 – ĐHBKHN Ví dụ: Mã nguồn Mã máy Chú thích ADD [7],5 06 07 05 Giá trị trong bộ nhớ tại địa chỉ 7 đ−ợc cộng với giá trị tức thời 5, kết quả lại đ−ợc l−u vào bộ nhớ tại địa chỉ 7. MOV REG[8],6 62 08 06 Giá trị tức thời 6 đ−ợc di chuyển vào không gian thanh ghi tại địa chỉ 8 1.4.7. Chế độ địa chỉ đích chỉ số, nguồn tức thời (Destination Indexed, Source Immediate) Trong chế độ này thì giá trị của thanh ghi X cộng với một chỉ số đ−ợc lấy làm địa chỉ để lấy dữ liệu trong bộ nhớ. Còn dữ liệu nguồn là một số trực tiếp. Tất cả những lệnh thuộc chế độ địa chỉ này đều là lệnh 3 byte. Bảng 4-16 : Chế độ địa chỉ đích chỉ số, nguồn tức thời Opcode Operand 1 Operand 2 Instruction Destination Index Immediate Value Ví dụ: Mã nguồn Mã máy Chú thích ADD [X+7],5 07 07 05 Giá trị trong bộ nhớ tại địa chỉ X+7 đ−ợc cộng với giá trị tức thời 5, kết quả lại đ−ợc l−u vào bộ nhớ tại địa chỉ X+7. MOV REG[X+8],6 63 08 06 Giá trị tức thời 6 đ−ợc di chuyển vào không gian thanh ghi tại địa chỉ X+8 1.4.8. Chế độ địa chỉ đích trực tiếp, nguồn trực tiếp (Destination Direct, Source Direct) Chỉ có duy nhất một lệnh sử dụng chế độ địa chỉ này, địa chỉ của đích đ−ợc l−u giữ trong toán hạng 1 của lệnh còn địa chỉ của nguồn đ−ợc l−u giữ trong toán hạng 2 của lệnh. Tất cả những lệnh sử dụng chế độ địa chỉ này đều là lệnh có độ dài 3 byte. Bảng 4-17: Chế độ địa chỉ đích trực tiếp, nguồn trực tiếp Opcode Operand 1 Operand 2 Instruction Destination Address Source Address Ví dụ: Mã nguồn Mã máy Chú thích MOV [7],[8] 5F 07 08 Giá trị trong bộ nhớ tại địa chỉ 8 đ−ợc di chuyển vào bộ nhớ tại địa chỉ 7. 1.4.9. Chế độ địa chỉ sử dụng con trỏ tự động tăng địa chỉ • Con trỏ là toán hạng nguồn (Source Indirect Post Increment) Chỉ có duy nhất một lệnh sử dụng chế độ địa chỉ này, địa chỉ nguồn l−u giữ trong toán hạng 1 hoạt động nh− địa chỉ của một con trỏ. Trong suốt quá trình lệnh thi hành thì giá trị của con trỏ sẽ quyết định xem dữ liệu nào trong RAM sẽ đ−ợc đọc. Sau khi đọc xong dữ liệu thì giá trị của con trỏ đ−ợc tăng lên 1. Bảng 4-18 : Chế độ địa chỉ Source Indiect Post Increment Opcode Operand 1 Instruction Source Address Pointer Ví dụ: Mã nguồn Mã máy Chú thích MVI A,[8] 3E 08 Giá trị trong bộ nhớ tại địa chỉ 8 trỏ tới một ô nhớ trong RAM. Giá trị tại ô nhớ con trỏ trỏ tới sẽ đ−ợc di chuyển vào thanh chứa. Sau đó, giá trị trong bộ nhớ tại địa chỉ 8 đ−ợc tăng lên. • Con trỏ là toán hạng đích (Destination Indirect Post Increment) 57 Tài liệu PSoC – biên dịch từ Datasheet bởi Nguyễn Xuân Sơn ĐKTĐ1 – K44 - ĐHBKHN Chỉ có duy nhất một lệnh sử dụng chế độ địa chỉ này, địa chỉ đích l−u giữ trong toán hạng 1 hoạt động nh− địa chỉ của một con trỏ. Trong suốt quá trình lệnh thi hành thì giá trị của con trỏ sẽ quyết định xem dữ liệu nào trong RAM sẽ đ−ợc đọc. Sau khi đọc xong dữ liệu thì giá trị của con trỏ đ−ợc tăng lên 1. Bảng 4-19: Chế độ Destination Indirect Post Increment Opcode Operand 1 Instruction Destination Address Pointer Ví dụ: Mã nguồn Mã máy Chú thích MVI [8],A 3F 08 Giá trị trong bộ nhớ tại địa chỉ 8 trỏ tới một ô nhớ trong RAM. Giá trị trong thanh chứa sẽ đ−ợc di chuyển tới vị trí ô nhớ mà con trỏ trỏ tới. Sau đó, giá trị trong bộ nhớ tại địa chỉ 8 đ−ợc tăng lên. Nhận xét: Nh− vậy ta thấy các chế độ địa chỉ trong PSoC cũng t−ơng đối dễ hiểu, tóm lại nó chỉ bao gồm: - Các dữ liệu tức thời là các con số: Ví dụ: 5 , 6 , 7 , 8 … - Các dữ liệu trực tiếp đ−ợc xác định thông qua các địa chỉ. Ví dụ: [7] , [8] … - Các dữ liệu đ−ợc xác định thông qua chỉ số, nó là dữ liệu ở địa chỉ [X+chỉ số)]: ví dụ: [X+5], [X+6], …. - Các dữ liệu đ−ợc xác định gián tiếp thông qua con trỏ nh− trong hai chế độ địa chỉ cuối. Đây cũng là hai chế độ địa chỉ mà ít loại Vi xử lý có đ−ợc. - Ta có thể nhận thấy rằng những lệnh lấy thanh ghi A hoặc X nh− là một phần của toán hạng đều là lệnh 2 byte (xem lại các ví dụ trên). Sở dĩ nh− vậy là vì trong mã lệnh đã đ−ợc định nghĩa sẵn là làm việc với thanh ghi nào. Chẳng hạn nh− trong ví dụ của mục 2.4.1 thì ta có thể thấy là mã máy gồm 2 byte, byte đầu tiên là mã lệnh của lệnh cộng vào thanh chứa, byte thứ hai là giá trị đ−ợc cộng vào thanh chứa. Nh− vậy, với cách định nghĩa trên thì những lệnh nh− vậy sẽ tiết kiệm đ−ợc chu kỳ hoạt động của chip, từ đó rút ngắn đ−ợc thời gian thực hiện lệnh. Việc mã hóa nh− vậy cho phép phát huy tốc độ tính toán của chíp trong những ứng dụng đòi hỏi tốc độ tính toán cao. - Ngoài ra còn phải phân biệt giữa cách truy xuất bộ nhớ RAM và bộ nhớ không gian thanh ghi. Cách truy xuất hai bộ nhớ này đ−ợc phân biệt thông qua lệnh. Ví dụ: [7] là dữ liệu tại địa chỉ 7 trong RAM, nh−ng REG[7] lại là dữ liệu tại địa chỉ 7 trong không gian thanh ghi. 58 Tài liệu về PSoC – Bản quyền thuộc Nguyễn Xuân Sơn – ĐKTĐ1 – K44 – ĐHBKHN 2. Ngắt và Bộ điều khiển ngắt Bảng 4-20: Các thanh ghi của bộ điều khiển ngắt Address Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Access 0,DAh INT_CLR0 VC3 Sleep GPIO Analog 3 Analog 2 Analog 1 Analog 0 V Monitor RW:00 0,DBh INT_CLR1 DCB13 DCB12 DBB11 DBB10 DCB03 DCB02 DBB01 DBB00 RW:00 0,DDh INT_CLR3 I2C RW:00 0,DEh INT_MSK3 ENSWINT I2C RW:00 0,E0h INT_MSK0 VC3 Sleep GPIO Analog 3 Analog 2 Analog 1 Analog 0 V Monitor RW:00 0,E1h INT_MSK1 DCB13 DCB12 DBB11 DBB10 DCB03 DCB02 DBB01 DBB00 RW:00 0,E2h INT_VC Pending Interrupt [7:0] RC:00 x,F7h CPU_F XOI Carry Zero GIE RL:00 Chú ý: L: Những lệnh ảnh h−ởng đến cờ nh− AND, OR và XOR có thể đ−ợc dùng để thay đổi thanh ghi này x: chữ ‘x’ nằm tr−ớc dấu phẩy trong tr−ờng địa chỉ chỉ rõ rằng thanh ghi này có thể đ−ợc truy nhập mà không cần biết là dãy thanh ghi nào đang đ−ợc sử dụng. Bộ điều khiển ngắt cho phép một đoạn mã của ng−ời lập trình đ−ợc thực hiện mỗi khi có một ngắt sinh ra từ các khối chức năng trong chip PSoC. Mỗi một khối số có một ngắt riêng và mỗi một cột khối t−ơng tự cũng có một ngắt riêng. Mỗi một ngắt cho nguồn cấp, chế độ ngủ, xung nhịp thay đổi, và một ngắt toàn cục cho các chân vào ra đa chức năng. Bộ điều khiển ngắt cùng với những thanh ghi của nó cho phép các ngắt có thể bị vô hiệu hóa đồng thời hoặc độc lập với nhau. Các thanh ghi cung cấp một cách thức để ng−ời sử dụng có thể xóa tất cả những ngắt đang chờ và thông báo ngắt, hoặc có thể xóa một cách độc lập hay riêng biệt thông báo ngắt và ngắt chờ. Một kỹ thuật phần mềm đ−ợc cung cấp để cho phép ng−ời lập trình thiết lập ngắt một cách riêng biệt. Thiết lập một ngắt bằng kỹ thuật này rất mạnh mẽ và hữu ích cho việc phát triển mã nguồn, khi mà nó không có đủ hệ thống phần cứng hoàn chỉnh để sinh ra một ngắt thực. Bảng 4-21 : Bảng vector ngắt của CY8C27xxx Mức −u tiên ngắt Địa chỉ ngắt Tên ngắt 0 (cao nhất) 0000h Reset 1 0004h Supply Voltage Monitor 2 0008h Analog Column 0 3 000Ch Analog Column 1 4 0010h Analog Column 2 5 0014h Analog Column 3 6 0018h VC3 7 001Ch GPIO 8 0020h PSOC Block DBB00 9 0024h PSOC Block DBB01 10 0028h PSOC Block DCB02 11 002Ch PSOC Block DCB03 12 0030h PSOC Block DBB10 13 0034h PSOC Block DBB11 14 0038h PSOC Block DCB12 15 003Ch PSOC Block DCB13 24 0060h I2C 25 (thấp nhất) 0064h Sleep Timer 2.1. Mô tả cấu trúc của bộ điều khiển ngắt 59 Tài liệu PSoC – biên dịch từ Datasheet bởi Nguyễn Xuân Sơn ĐKTĐ1 – K44 - ĐHBKHN Interrupt Source: Nguồn ngắt (bộ định thời, các chân vào ra đa chức năng... ) Interrupt Taken or INT_CLRx Write: Thi hành ngắt hoặc xóa ngắt INT_MSKx: Lập mặt nạ che ngắt Post Interrupt: Thông báo ngắt Pending Interrupt: Ngắt chờ Priority Encoder: Bộ mã hóa mức −u tiên của ngắt GIE (CPU_F[0]): Cho phép ngắt toàn cục (Global Interrupt Enable) Interupt Request: Yêu cầu ngắt Hình 4-2: Sơ đồ khối của bộ điều khiển ngắt Dãy các sự kiện xảy ra khi một ngắt đ−ợc thi hành nh− sau: 1. Khi một ngắt đ−ợc kích hoạt, có thể là do một điều kiện ngắt đ−ợc sinh ra (do tràn bộ đếm chẳng hạn) và tr−ớc đó thông báo ngắt đ−ợc cho phép bởi thanh ghi mặt nạ che ngắt, hoặc có một ngắt đang chờ đ−ợc xử lý và GIE (global interrupt enable - cho phép ngắt toàn cục) đ−ợc đặt từ 0 sang 1 trong thanh ghi cờ của CPU. 2. Lệnh thi hành hiện thời kết thúc ở biên giới lệnh (biên giới lệnh là thời điểm CPU chuyển từ lệnh này sang lệnh khác). 3. Thủ tục ngắt bên trong đ−ợc thực hiện, tiêu tốn 13 chu kỳ máy. Trong khoảng thời gian này thì CPU thực hiện những công việc sau: - L−u byte cao, byte thấp của bộ đếm ch−ơng trình (PCH và PCL) và thanh ghi cờ (CPU_F) vào trong Stack theo thứ tự nh− trên. - Thanh ghi cờ đ−ợc xóa trắng và từ đó bit GIE bị xóa về 0 và những ngắt mới sinh ra tạm thời bị cấm. - Byte cao của bộ đếm ch−ơng trình (PC[15:8]) đ−ợc xóa về 0 (zero) - Vector ngắt đ−ợc đọc từ bộ điều khiển vector ngắt và giá trị của nó đ−ợc đặt vào trong byte thấp của bộ đếm ch−ơng trình (PC[7:0]). Việc này sẽ đặt bộ đếm ch−ơng trình trỏ vào địa chỉ thích hợp trong bảng vector ngắt. 4. Ch−ơng trình sẽ thi hành vector trong bảng vector ngắt. Nhìn chung thì một lệnh LJMP trong bảng vector ngắt sẽ chuyển sự thi hành của CPU tới trình phục vụ ngắt của ng−ời dùng để phục vụ cho ngắt này. 60 Tài liệu về PSoC – Bản quyền thuộc Nguyễn Xuân Sơn – ĐKTĐ1 – K44 – ĐHBKHN 5. Trình phục vụ ngắt đ−ợc thi hành. L−u ý rằng tất cả các ngắt đều bị vô hiệu hóa kể từ khi bit GIE = 0. Các ngắt khác có thể đ−ợc mở lại trong trình phục vụ ngắt nếu cần thiết bằng cách đặt bit GIE = 1 (hãy cẩn thận trong việc này bởi vì nó có thể làm tràn Stack) 6. Khi trình phục vụ ngắt kết thúc với lệnh RETI thì thanh ghi cờ (CPU_F), byte thấp và byte cao của bộ đếm ch−ơng trình đ−ợc lấy ra khỏi Stack theo đúng trình tự nh− trên. Từ khi thanh ghi cờ (CPU_F) đ−ợc khôi phục lại giá trị thì nó sẽ cho phép các ngắt. (GIE =1). 7. Ch−ơng trình sẽ bắt đầu thi hành ở lệnh kế tiếp, ngay sau lệnh đ−ợc thực hiện tr−ớc khi xảy ra ngắt. Tuy nhiên, nếu nh− có ngắt đang chờ đ−ợc phục vụ thì nó sẽ đ−ợc thực hiện tr−ớc. 2.2. Các thanh ghi ngắt Bảng 4-20 đã cho ta một cái nhìn tổng quan về mối quan hệ của các thanh ghi đối với hoạt động của bộ điều khiển vector ngắt. Chi tiết về sử dụng các thanh ghi đ−ợc trình bày sau đây. 2.2.1. Thanh ghi INT_CLRx Có 3 thanh ghi xóa ngắt (INT_CLR0, INT_CLR1 và INT_CLR3) có thể đ−ợc quy vào tên gọi chung INT_CLRx. Những thanh ghi INT_CLRx là t−ơng tự nh− những thanh ghi INT_MSKx nghĩa là chúng giữ một bit cho mỗi nguồn ngắt. Tuy nhiên, về mặt chức năng thì thanh ghi INT_CLRx lại giống nh− thanh ghi INT_VC mặc dù hoạt động của chúng hoàn toàn độc lập với nhau. Khi một thanh ghi INT_CLRx đ−ợc đọc thì bất kỳ bit nào đ−ợc đặt đều chỉ rõ là ngắt nào đã thông báo cho tài nguyên phần cứng đó. Bởi vậy, đọc những thanh ghi đó sẽ giúp cho ng−ời sử dụng xác định đ−ợc tất cả các thông báo ngắt. Cách một giá trị bit riêng rẽ đ−ợc ghi vào thanh ghi INT_CLRx đ−ợc quyết định bởi bit ENSWINT (Enable Software Interrupt) trong thanh ghi INT_MSK3. Khi bit ENSWINT đ−ợc xóa (trạng thái mặc định), việc viết 1 vào một bit nào đó trong thanh ghi INT_CLRx đều không có tác dụng gì. Tuy nhiên, việc viết 0 vào một bit nào đó trong thanh ghi INT_CLRx trong khi bit ENSWINT = 0 sẽ xóa thông báo ngắt t−ơng ứng. Nếu bit ENSWINT = 1 thì việc viết 0 vào bất cứ bit nào trong thanh ghi INT_CLRx sẽ bị bỏ qua. Tuy nhiên, việc viết 1 vào một bit nào đó trong thanh ghi INT_CLRx trong khi bit ENSWINT = 1 sẽ làm cho một ngắt t−ơng ứng đ−ợc thông báo. Việc mở ngắt mềm sẽ cho phép mã của ng−ời sử dụng tạo ra một ngắt mềm và có thể hữu ích cho việc gỡ rối trong trình phục vụ ngắt, hay loại trừ ảnh h−ởng của việc sinh ra ngắt mới trong khi ngắt cũ vẫn đang đ−ợc thực thi. 2.2.2. Thanh ghi INT_MSKx Có 3 thanh ghi mặt nạ che ngắt (INT_MSK0, INT_MSK1, INT_MSK3) có thể đ−ợc quy vào thanh ghi có tên gọi chung INT_MSKx. Nếu đ−ợc xóa thì mỗi bit trong thanh ghi INT_MSKx sẽ ngăn chặn một ngắt t−ơng ứng với bit đó trở thành một ngắt chờ đ−ợc xử lý (đầu vào của bộ mã hóa −u tiên). Tuy nhiên một ngắt vẫn có thể đ−ợc thông báo ngay cả khi bit mặt nạ của nó là 0. Nghĩa là tất cả các bit trong thanh ghi INT_CLRx đều độc lập với các bit trong thanh ghi INT_MSKx. Nếu một bit trong thanh ghi INT_MSKx đ−ợc set = 1 thì nguồn ngắt kết hợp với bit mặt nạ của nó sẽ sinh ra một ngắt để trở thành ngắt chờ. Ví dụ: nếu bit INT_MSK0[5] đ−ợc set và có một chân vào ra đa chức năng đ−ợc cấu hình để sinh ra một ngắt thì bộ điều khiển ngắt sẽ cho phép một ngắt của GPIO yêu cầu thông báo và trở thành một ngắt chờ phản hồi 61 Tài liệu PSoC – biên dịch từ Datasheet bởi Nguyễn Xuân Sơn ĐKTĐ1 – K44 - ĐHBKHN của CPU. Nếu một ngắt có mức −u tiên cao hơn đ−ợc sinh ra tr−ớc sự phản hồi của CPU tới ngắt GPIO thì ngắt có yêu cầu cao hơn sẽ là ngắt chờ chứ không phải là ngắt GPIO. INT_MSK3[7] (ENSWINT) là một bit không có mặt nạ đặc biệt để điều khiển hoạt động của thanh ghi INT_CLRx. (Xem thêm phần d−ới để biết thêm chi tiết). 2.2.3. Thanh chi INT_VC Thanh ghi INT_VC thực hiện 2 nhiệm vụ. Khi thanh ghi đ−ợc đọc thì nó sẽ trả về giá trị của ngắt chờ có mức −u tiên cao nhất. Ví dụ: Nếu ngắt GPIO và ngắt I2C đang ở trạng thái chờ và thanh ghi INT_VC đ−ợc đọc thì nó sẽ đọc ra giá trị 1Ch (là giá trị của ngắt GPIO). Tuy nhiên, nếu không có ngắt nào đang ở trạng thái chờ thì việc đọc thanh ghi INT_VC sẽ trả về giá trị 00h. Đây là giá trị của vector reset trong bảng vector ngắt. Tuy nhiên là việc đọc đ−ợc giá trị 00h từ thanh ghi INT_VC không có nghĩa là vector ngắt reset đang chờ mà điều đó chỉ nói lên rằng chẳng có vector ngắt nào đang ở trạng thái chờ cả. Thanh ghi có mức −u tiên cao nhất đ−ợc chỉ rõ bởi giá trị đọc về từ thanh ghi INT_VC và nó đ−ợc gỡ bỏ khỏi danh sách các ngắt chờ khi CPU thực hiện lệnh đọc vector ngắt. Việc xóa ngắt chờ có mức −u tiên cao nhất xảy ra không đồng bộ. 2.2.4. Thanh ghi CPU_F Chỉ có bit GIE trong thanh ghi CPU_F là có ảnh h−ởng tới bộ điều khiển ngắt, bit này là bit cho phép ngắt toàn cục (Global Interrupt Enable). Chỉ khi bit này đ−ợc set thì CPU mới có thể thực hiện một ngắt chờ. Khi bit này đ−ợc xóa thì CPU sẽ không thực hiện một ngắt chờ nào cả (Cần l−u ý là một ngắt vẫn có thông báo và nếu bit mặt nạ cho phép thi nó vẫn trở thành ngắt chờ mặc dù bit GIE = 0, nh−ng nó chỉ có thể đ−ợc thực hiện khi bit GIE =1). Bit GIE có giá trị mặc định = 0. Để có thể đặt hoặc xóa bit GIE thì ta sử dụng các lệnh logic nh− AND,OR,XOR thanh ghi F với giá trị thích hợp. Tất nhiên, ph−ơng pháp sử dụng ở đây là ph−ơng pháp lập mặt nạ. Ví dụ: khi ta muốn xóa bit GIE thì ta sử dụng lệnh AND F,0FEh còn khi muốn đặt bit GIE =1 thì ta sử dụng lệnh OR F,01h. 62 Tài liệu về PSoC – Bản quyền thuộc Nguyễn Xuân Sơn – ĐKTĐ1 – K44 – ĐHBKHN 3. Các cổng vào ra đa chức năng Cổng vào ra đa chức năng cung cấp cho CPU một giao diện với bên ngoài. Chúng đòi hỏi một số l−ợng lớn thanh ghi cấu hình để hỗ trợ cho nhiều chế hoạt động vào / ra bao gồm cả số và t−ơng tự. Bảng 4-22: Các thanh ghi vào ra đa chức năng Address Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Access 0,xxh PRTxDR Data Register (Thanh ghi dữ liệu) RW:00 0,xxh PRTxIE Bit Interrupt Enable (Bit cho phép ngắt) RW:00 0,xxh PRTxGS Global Select (Lựa chọn toàn cục) RW:00 0,xxh PRTxDM2 Driver Mode 2 (Thanh ghi chế độ hoạt động 2) RW:FF 1,xxh PRTxDM0 Driver Mode 0 (Thanh ghi chế độ hoạt động 0) RW:00 1,xxh PRTxDM1 Driver Mode 1 (Thanh ghi chế độ hoạt động 1) RW:FF 1,xxh PRTxIC0 Interrupt Control 0 (Thanh ghi điều khiển ngắt 0) RW:00 1,xxh PRTxIC1 Interrupt Control 1 (Thanh ghi điều khiển ngắt 1) RW:00 Chú ý: kí tự “x” sau dấu phẩy trong tr−ờng địa chỉ có nghĩa là các cổng vào ra đều có riêng biệt các thanh ghi trên. Mỗi một cổng thì các thanh ghi sẽ có một địa chỉ riêng. Nh−ng để dễ hiểu thì ta chỉ xét chung cho tr−ờng hợp tổng quát. Các cổng vào ra đa chức năng đều có độ rộng là 8 bit/ 1 cổng. Mỗi một cổng vào/ra bao gồm 8 khối GPIO giống hệt nhau. Mỗi một khối GPIO đều đ−ợc kết nối với bit có số thứ tự t−ơng ứng trong địa chỉ và thanh ghi. Bởi vậy, những thanh ghi trong bảng 4-22 thực sự chỉ dành cho một cổng (bao gồm 8 khối GPIO). Trong đó thì vị trí của bit sẽ chỉ rõ là khối GPIO nào trong 8 khối đ−ợc điều khiển với cổng vào ra. Mỗi một khối GPIO có thể đ−ợc sử dụng cho những kiểu vào ra sau: - Vào ra số (Vào ra số điều khiển bởi phần mềm) - Vào ra toàn cục (Vào ra cho các khối PSoC số) - Vào ra t−ơng tự (Vào ra cho các khối PSoC t−ơng tự) Mỗi một chân vào ra đều có vài chế độ hoạt động cũng nh− là khả năng tạo ngắt. Trong khi tất cả các chân đều đ−ợc nối đ−ờng vào ra số thì một vài chân lại không đ−ợc kết nối với chức năng vào ra của khối t−ơng tự hoặc bus toàn cục. • Vào ra số Một trong những chức năng hoạt động cơ bản của cổng vào ra đa chức năng là cho phép CPU gửi thông tin ra ngoài chip và lấy thông tin từ bên ngoài vào. Điều này đ−ợc thực hiện nhờ thanh ghi dữ liệu cổng (Port Data Register – PRTxDR). Việc viết dữ liệu vào thanh ghi PRTxDR sẽ l−u lại trạng thái dữ liệu, mỗi bit cho một chân GPIO. Trong chế độ th−ờng (standard non-bypass) thì mỗi chân GPIO sẽ lặp lại bit dữ liệu đó. Nghĩa là khi ta viết một giá trị vào trong thanh ghi dữ liệu PRTxDR thì ở đầu ra của cổng t−ơng ứng sẽ có giá trị giống nh− trong thanh ghi dữ liệu. Điện áp thực ở chân ra phụ thuộc vào chế độ hoạt động của chân và tải bên ngoài đ−ợc nối vào chân đó. (Xem cấu trúc của 1 chân vào ra để hiểu rõ thêm) CPU có thể đọc giá trị của một cổng bằng cách đọc giá trị của thanh ghi PRTxDR. Khi CPU đọc giá trị của PRTxDR thì giá trị điện áp hiện thời của chân vào ra sẽ đ−ợc chuyển đổi sang giá trị logic và đ−ợc trả về cho CPU. Hoạt động này sẽ đọc giá trị điện áp của chân vào ra chứ không phải là đọc về giá trị chốt của thanh ghi PRTxDR. 63 Tài liệu PSoC – biên dịch từ Datasheet bởi Nguyễn Xuân Sơn ĐKTĐ1 – K44 - ĐHBKHN • Vào ra toàn cục (Global IO) Các cổng vào ra đa chức năng cũng đ−ợc nối liền với các khối số thông qua các vào ra toàn cục. Tính năng vào ra toàn cục của mỗi cổng đ−ợc mặc định ở trạng thái tắt. Để sử dụng tính năng này thì có 2 thông số cần phải đ−ợc thay đổi. Thứ nhất để cấu hình cho một chân GPIO hoạt động nh− là một đầu vào toàn cục thì bit lựa chọn cổng toàn cục cần phải đ−ợc set để yêu cầu GPIO sử dụng thanh ghi PRTxGS. Thứ hai là chế độ hoạt động của GPIO cần phải đ−ợc đ−a về trạng thái cao trở. Để cấu hình cho một chân GPIO hoạt động nh− là một đầu ra toàn cục thì bit lựa chọn cổng toàn cục cần phải đ−ợc set lần nữa. Nh−ng trong tr−ờng hợp này thì chế độ hoạt động của GPIO là bất kì trừ chế độ cao trở. • Vào ra t−ơng tự Tín hiệu t−ơng tự có thể đ−ợc truyền dẫn giữa CPU và chân của chíp thông qua chân AOUT của khối. Chân này đ−ợc nối với khối thông qua một điện trở (khoảng 300 ohms). Chân vào ra đa chức năng cần phải đ−a về chế độ cao trở trong tr−ờng hợp này. • Các ngắt của khối GPIO. Mỗi một khối GPIO đều có thể đ−ợc cấu hình một cách độc lập cho khả năng ngắt. Các khối GPIO đ−ợc cấu hình cho phép lựa chọn ngắt cho từng chân và cũng có thể lựa chọn kiểu ngắt phù hợp. Nghĩa là các khối có thể sinh ra ngắt khi chân ở mức logic cao, thấp hoặc khi nó thay đổi so với lần đọc tr−ớc. Các khối đều có một đầu ra ngắt riêng (INTO), nó đ−ợc nối với các khối GPIO khác bằng một kiểu nối dây loại OR. Do tất cả các chân đều đ−ợc nối với nhau theo kiểu OR để sử dụng chung một hệ thống ngắt GPIO. Nên nếu một ngắt GPIO đ−ợc chia sẻ cho nhiều chân vào ra thì trình phục vụ ngắt của ng−ời sử dụng cần phải sử dụng vài kỹ thuật đ−ợc thiết kế sẵn để quyết định xem là chân nào đ−ợc chọn là nguồn sinh ngắt. Sử dụng một ngắt GPIO yêu cầu những b−ớc sau: 1. Đặt chế độ ngắt cho khối chân GPIO. 2. Mở bit ngắt cho khối chân GPIO. 3. Mở bit mặt nạ ngắt cho ngắt GPIO. 4. Xác nhận bit ngắt toàn cục GIE. ở phạm vi khối GPIO, xác nhận đ−ờng ra ngắt phụ thuộc duy nhất vào bit cho phép ngắt và trạng thái của chân quan hệ với sự lựa chọn chế độ ngắt. ở cấp độ chip, do trạng thái tự nhiên của cổng nối dây OR, ngắt GPIO không phải là ngắt nhạy theo s−ờn hay ngắt nhạy theo mức. Chúng có thể đ−ợc lựa chọn là nhạy theo s−ờn nh−ng nhạy theo mức phải đ−ợc tháo bỏ khỏi đ−ờng ra ngắt của cổng nối dây OR. Nếu không có ngắt GPIO nào đang xác nhận, thì một ngắt GPIO sẽ đ−ợc sinh ra bất cứ khi nào bit cho phép ngắt của một chân GPIO đ−ợc set và chân GPIO chuyển sang cao hoặc thấp một cách thích hợp. Một khi điều này xảy ra, đ−ờng ra của ngắt INTO sẽ đ−ợc kéo xuống thấp để xác nhận ngắt GPIO (Giả định rằng các điều kiện sinh ngắt của hệ thống là cho phép, nh− là cho phép ngắt GPIO toàn cục và cho phép ngắt toàn cục). L−u ý rằng cho phép ngắt ở chân có thể xác nhận đầu ra ngắt INTO ngay lập tức, nếu nh− điều kiện chế độ ngắt đã sẵn sàng xuất hiện ở chân. Một khi INTO đ−ợc kéo xuống mức thấp, nó sẽ tiếp tục giữ INTO ở mức thấp cho đến khi một trong các điều kiện sau đây thay đổi: 64 Tài liệu về PSoC – Bản quyền thuộc Nguyễn Xuân Sơn – ĐKTĐ1 – K44 – ĐHBKHN - Bit cho phép ngắt ở chân đ−ợc xóa - Điện áp ở chân chuyển đổi sang trạng thái đối lập - Trong chế độ thay đổi ngắt, thanh ghi dữ liệu đ−ợc đọc, do đó thiết lập mức độ ngắt nội tại sang trạng thái đối lập. - Chế độ ngắt bị thay đổi do đó trạng thái hiện thời của chân không sinh ra ngắt. Khi một trong các điều kiện trên xảy ra thì đầu ra INTO đ−ợc giải phóng. Tại thời điểm này, các chân khác (hoặc chính chân này) có thể xác nhận đầu ra ngắt của nó, kéo đ−ờng chung xuống thấp để xác nhận một ngắt mới. L−u ý rằng nếu một chân đang xác nhận đ−ờng ra ngắt INTO và khi đó một chân khác lại xác nhận đầu ra ngắt của nó thì khi chân tr−ớc giải phóng đ−ờng ra ngắt của nó mà chân thứ hai đã điều khiển đầu ra ngắt INTO của nó thì sẽ không có sự thay đổi nào đ−ợc phát hiện ra ở đầu ra ngắt INTO. Tức là sẽ không có ngắt mới nào đ−ợc xác nhận trên ngắt GPIO. Chú ý, sử dụng AND/OR trạng thái của chân GPIO và của bit cho phép ngắt toàn cục để nắm bắt đ−ợc toàn bộ các ngắt của cổng nối dây OR trong khối GPIO. 3.1. Mô tả cấu trúc của một chân vào ra đa chức năng Sơ đồ khối chính của một khối GPIO đ−ợc minh họa trong hình 4 -3. L−u ý rằng một vài chân không có đủ các chức năng nh− hình vẽ, phụ thuộc vào kết nối ở bên trong. Hình 4 – 3 : Sơ đồ một khối GPIO 65 Tài liệu PSoC – biên dịch từ Datasheet bởi Nguyễn Xuân Sơn ĐKTĐ1 – K44 - ĐHBKHN Hình 4 - 4: Sơ đồ khối chế độ ngắt của GPIO 3.2. Các thanh ghi của GPIO Đối với một khối GPIO đã đ−ợc lựa chọn, những thannh ghi độc lập đ−ợc định địa chỉ nh− trong bảng 4 - 23. Trong phần tên của thanh ghi, ký hiệu “x” là số thứ tự của cổng. đ−ợc cấu hình theo cấp độ chíp (x=0 tới 7). DA[1:0] đ−ợc quy vào 2 trọng số nhỏ nhất của địa chỉ thanh ghi. Bảng 4-23: Địa chỉ bit của thanh ghi bên trong XOI DA[1:0] Register Reset to: (Name) Function 0 00b PRTxDR 0 DIN Data 0 01b PRTxIE 0 IE Interrupt Enable 0 10b PRTxGS 0 BYP Global Select 0 11b PRTxDM2 1 DM2 Driver Mode, Bit 2 1 00b PRTxDM0 0 DM0 Drive Mode, Bit 0 1 01b PRTxDM1 1 DM1 Driver Mode, Bit 1 1 10b PRTxIC0 0 IM0 Intrpt. Mask, Bit 0 1 11b PRTxIC1 0 IM1 Intrpt. Mask, Bit 1 3.2.1. Thanh ghi PRTxDR Ghi dữ liệu vào 1 bit trong thanh ghi PRTxDR sẽ làm cho trạng thái đầu ra của chân t−ơng ứng ở mức cao (DIN=1) hoặc ở mức thấp (DIN=0). Trừ khi chế độ bypass đ−ợc lựa chọn (hoặc I2C Enable =1 hay thanh ghi lựa chọn toàn cục đ−ợc viết ở mức cao). Việc đọc giá trị của PRTxDR sẽ trả về giá trị thực trạng thái của chân, đ−ợc quan sát bởi bộ đệm đầu vào. Giá trị đó có thể không giống với giá trị mong muốn ở đầu ra nếu nh− tải đ−ợc nối với chân quá lớn. 3.2.2. Thanh ghi PRTxIE Thanh ghi PRTxIE đ−ợc dùng để mở và đóng việc cho phép ngắt nội tại tới một khối GPIO. Giá trị 1 sẽ cho phép ngắt ở đầu ra INTO và giá trị 0 sẽ không cho phép ngắt ở đầu ra INTO do đó nó có thể ở trạng thái cao trở. 3.2.3. Thanh ghi PRTxGS Thanh ghi PRTxGS đ−ợc sử dụng để lựa chọn khối cho sự kết nối tới đầu vào hoặc đầu ra toàn cục. Việc viết giá trị logic cao vào thanh ghi này sẽ cho phép global bypass. Nếu chế độ cổng ra là cao trở thì chân đó đ−ợc lựa chọn cho đầu vào toàn cục. 66 Tài liệu về PSoC – Bản quyền thuộc Nguyễn Xuân Sơn – ĐKTĐ1 – K44 – ĐHBKHN Nếu chế độ cổng ra khác chế độ cao trở thì chân đó đ−ợc lựa chọn là đầu ra toàn cục, bỏ qua giá trị của thanh ghi dữ liệu. (giả sử I2C enable = 0). Nếu thanh ghi đ−ợc xóa về không thì chức năng vào ra toàn cục của chân đó bị khóa 3.2.4. Thanh ghi PRTxDMx Có 8 chế độ điều khiển cho mỗi một chân của cổng. Ba bit chế độ đ−ợc sử dụng để lựa chọn một trong 8 chế độ nói trên. Ba bit chế độ đ−ợc phân chia trong ba thanh ghi khác nhau. (PRTxDM0, PRTxDM1,PRTxDM2). Vị trí t−ơng ứng của bit trong ba thanh ghi sẽ t−ơng ứng với vị trí chân ra của cổng. (Ví dụ ba bit điều khiển cho chân P2[1] sẽ là bit PRT2DM0[1], PRT2DM1[1], PRT2DM2[2]). Tuy rằng ba bit này đ−ợc phân chia trong ba thanh ghi khác nhau nh−ng chúng lại hay đ−ợc sử dụng cùng nhau theo các cặp bit t−ơng ứng. Ví dụ để xét chế độ cho chân ra P2[1] thì ta quan tâm đến các bit trong DM2,DM1,DM0 hay DM[2:0]. Bảng 4-22 sẽ cho ta cái nhìn tổng quan về sự phân chia này. Bảng 4 - 24: Các chế độ điều khiển chân ra của chíp Chế độ DM[2:0] Trạng thái của chân Mô tả 000b Resistive pull down Khỏe ở mức cao, điện trở treo ở mức thấp 001b Strong driver Chế độ khỏe ở cả mức cao và thấp 010b High Impedance Trở kháng cao cả ở mức cao và thấp, cho phép đầu vào số 011b Resistive pull up Khỏe ở mức thấp, điện trở treo ở mức cao. 100b Open drain high Chậm, khỏe ở mức cao, trở kháng cao ở mức thấp 101b Slow strong driver Chế độ chậm, khỏe ở mức thấp và cao. 110b High Impedance, analog Chế độ cao trở cho cả cao và thấp, đầu vào số bị khóa, 111b Open drain low Chế độ chậm, khỏe ở mức thấp, cao trở ở mức cao. Để lựa chọn đầu vào t−ơng tự, chế độ điều khiển cổng ra cần phải đ−ợc chọn là một trong các chế độ cao trở, có thể là 010b hoặc 110b. Chế độ 110b có một −u điểm là bộ đệm đầu vào khối số bị khóa, vì thế không có dòng điện “crowbar” chạy qua ngay cả khi đầu vào t−ơng tự không gần với đ−ờng nguồn. Khi đầu vào số đ−ợc cần đến trong những chân đ−ợc dùng nh− đầu vào t−ơng tự thì nên sử dụng chế 010b. Khi chế độ 110b đ−ợc sử dụng thì chân sẽ luôn đ−ợc CPU đọc nh− là một giá trị không và chân đó sẽ không thể sinh ra đ−ợc một ngắt hữu ích. (Không hoàn toàn yêu cầu một chế độ cao trở cần phải đ−ợc lựa chọn khi hoạt động với tín hiệu t−ơng tự). Với đầu vào toàn cục sử dụng cùng với vào ra t−ơng tự thì chế độ điều khiển cần phải đ−ợc đặt là 010b. Khối vào ra đa chức năng GPIO cung cấp một chế độ cao trở mặc định. Điều này đạt đ−ợc nhờ vào ảnh h−ởng của việc reset trạng thái của tất cả các thanh ghi PRTxDM1 và PRTxDM2 về FFh. Chế độ điều khiển resistive đặt một điện trở nối tiếp với đầu ra ở bên trong, cho đầu ra ở mức thấp (chế độ 000b) hoặc đầu ra ở mức cao (chế độ 011b). Chế độ khỏe (strong) 001b cung cấp một s−ờn lên nhanh nhất và chế độ 101b cũng cung cấp một s−ờn xuống nhanh nhất. Chế độ open drain cũng đ−ợc dùng điều khiển tốc độ s−ờn xuống. Các chế độ đó cho phép chức năng cực máng để ngỏ nh− là chế độ I2C 111b. (mặc dù tốc độ s−ờn thấp vẫn không đủ chậm để gặp đ−ợc chế độ I2C nhanh đ−ợc định nghĩa). 3.2.5. Thanh ghi PRTxICx Chế độ ngắt của từng chân đ−ợc quyết định bởi các bít trong hai thanh ghi PRTxIC0 và PRTxIC1. Chúng đ−ợc quy vào là IM0 và IM1 hay IM[1:0]. 67 Tài liệu PSoC – biên dịch từ Datasheet bởi Nguyễn Xuân Sơn ĐKTĐ1 – K44 - ĐHBKHN Có 4 chế độ ngắt có thể có cho chân của cổng. Hai bit chế độ đ−ợc yêu cầu để lựa chọn các chế độ nói trên và từng cặp bit này đ−ợc phân chia trong 2 thanh ghi khác nhau (PRTxIC0 và PRTxIC1). Vị trí của bit là t−ơng ứng với vị trí của chân. Ví dụ chân 2 của cổng 1 sẽ t−ơng ứng với bit 2 trong cả hai thanh ghi PRT1IC0 và PRT1IC1. Từng cặp bit này đ−ợc xem nh− là một nhóm. Bảng sau sẽ cho ta thấy rõ hơn về các chế độ ngắt trong GPIO. Bảng 4 - 25: Chế độ ngắt của GPIO Chế độ ngắt IM[1:0] Mô tả 00b Vô hiệu hóa ngắt, không xác nhận đầu ra INTO 01b Xác nhận ngắt khi chân ở mức thấp 10b Xác nhận ngắt khi chân ở mức cao 11b Xác nhạn ngắt khi có sự thay đổi trạng thái logic của chân Chế độ 00b sẽ vô hiệu hóa ngắt của chân, kể cả khi bit cho phép ngắt GPIO là 1 (của thanh ghi PRTxIE). Chế độ 01b có tác dụng là khối GPIO sẽ xác nhận một đ−ờng ngắt (INTO) khi điện áp của chân ở mức thấp. Bit cho phép đ−ờng ngắt của khối GPIO đ−ợc đặt lên mức cao. Chế độ 10b có tác dụng là khối GPIO sẽ xác nhận một đ−ờng ngắt (INTO) khi điện áp của chân ở mức cao. Bit cho phép đ−ờng ngắt của khối GPIO đ−ợc đặt lên mức cao. Chế độ 11b có tác dụng là khối GPIO sẽ xác nhận một đ−ờng ngắt (INTO) khi điện áp của chân đối lập so với giá trị đọc tr−ớc đó. Chế độ này thay đổi theo hai chế độ trên, tùy thuộc vào giá trị mà tr−ớc đó nó đọc đ−ợc từ cổng trong quá trình đọc thanh ghi dữ liệu cổng (PRTxDR). Nếu tr−ớc đó nó đ−ợc giá trị 0 từ GPIO thì GPIO sẽ chuyển sang ngắt ở mức cao. Còn nếu giá trị nó đọc đ−ợc tr−ớc đó là 1 thì GPIO sẽ chuyển sang ngắt ở mức thấp. Giá trị tr−ớc đó của chân là 0 Giá trị tr−ớc đó của chân là 1 GPIO pin interrupt enable set : cho phép ngắt của chân GPIO Interrupt occus : xảy ra ngắt Pin State Waveform : dạng xung ở chân Hình 4 - 5: Chế độ ngắt 11b của GPIO Hình 4-5 giả thiết rằng bit cho phép ngắt toàn cục GIE = 1, bit mặt nạ ngắt đã đ−ợc đặt = 1, chế độ ngắt của GPIO là 11b. Sự thay đổi chế độ ngắt khác với các chế độ khác, dựa vào giá trị mà nó đọc đ−ợc tr−ớc đó của chân để quyết định nếu nh− trạng thái của chân thay đổi. Vì thế, cổng chứa chân GPIO quan tâm cần phải đ−ợc đọc trong suốt quá trình phục vụ ngắt. Nếu cổng không đ−ợc đọc thì chế độ ngắt sẽ chỉ hoạt động ở chế độ cao nếu giá trị tr−ớc đó là 0 và ở chế độ mức thấp nếu giá trị tr−ớc đó là 1. 68 Tài liệu về PSoC – Bản quyền thuộc Nguyễn Xuân Sơn – ĐKTĐ1 – K44 – ĐHBKHN 4. Các bộ tạo dao động 4.1. Bộ tạo dao động chính bên trong (IMO - Internal Main Oscillator) Bảng 4 - 26: Thanh ghi của bộ IMO Address Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Access 1,E8h IMO_TR Trim [7:0] W:00 Đầu ra của bộ IMO có 2 loại, một loại là SYSCLK có thể là nguồn xung nhịp 24MHz ở bên trong hay nguồn xung nhịp bên ngoài, một loại là SYSCLK2X có tần số xung nhịp gấp đôi SYSCLK. Khi không có đầu vào độ chính xác cao từ bộ dao động thạch anh 32 kHz thì độ chính xác của nguồn xung nhịp 24/48MHz ở bên trong sẽ là +/- 2.5% đối với dải nhiệt độ và hai mức điện áp hoạt động (3.3 V +/-0.3V và 5.0 V +/-5%). Không cần thêm một thành phần bên ngoài nào để đạt đ−ợc mức độ chính xác này. Có một lựa chọn để chốt pha của bộ dao động bên trong này sang bộ dao động thạch anh bên ngoài. Vì thế việc lựa chọn thạch anh và độ chính xác của nó sẽ quyết định tính chính xác của bộ dao động bên ngoài. Bộ dao động thạch anh bên ngoài cần phải đ−ợc ổn định tr−ớc khi chốt tần số dao động của bộ dao động chính bên trong vào nguồn xung nhịp này. Bộ IMO có thể đ−ợc khóa khi sử dụng nguồn xung nhịp bên ngoài. Bởi vậy, mạch nhân đôi tần số (SYSCLK2X) có thể đ−ợc ngắt để tiết kiệm năng l−ợng cho hệ thống. L−u ý rằng khi sử dụng nguồn xung nhịp bên ngoài, nếu nh− SYSCLK2X đ−ợc cần đến thì IMO không thể bị khóa. 4.1.1. Thanh ghi IMO_TR (Internal Main Oscillator Trim Register) Giá trị mặc định của tấn số chíp cho chế độ hoạt động 5 vôn đ−ợc tải vào thanh ghi IMO_TR tại thời điểm khởi động. Bộ IMO sẽ hoạt động với độ sai lệch riêng trong dải điện áp từ 4.75 đến 5.25 vôn khi giữ nguyên giá trị của thanh ghi này. Nếu nh− chíp hoạt động ở điện áp thấp, mã của ng−ời sử dụng cần phải thay đổi nội dung của thanh ghi này. Để hoạt động với giải điện áp 3.0V +/-0.3V thì phải thực hiện với một lệnh đọc bảng tới SROM (Supervisor ROM), nó có thể cung cấp một giá trị cắt tần số cho chế độ hoạt động này. Để hoạt động giữa hai giải điện áp, mã của ng−ời sử dụng có thể tự động thêm vào giá trị tốt nhất sử dụng hai giá trị cắt tần số có sẵn của nhà sản xuất. Bit 7- 0: Trim. Những bit này l−u giữ giá trị cắt tần số của bộ IMO, giá trị của thanh ghi càng lớn thì tần số dao động của bộ IMO càng lớn. 4.2. Bộ tạo dao động tốc độ thấp nội tại (ILO - Internal Low Speed Oscillator) Bảng 4 - 27: Thanh ghi ILO Address Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Access 1,E9h ILO_TR Bias Trim[1:0] Freq Trim[3:0] W:00 ILO là một bộ phát xung nhịp nội tại tốc độ thấp 32 kHz. Nó có khả năng sinh ra ngắt để đánh thức chế độ ngủ và reset lại đồng hồ Watchdog. Bộ tạo dao động này cũng đ−ợc sử dụng nh− là một nguồn xung nhịp cho các khối số. Bộ ILO có thể hoạt động ở ba chế độ: chế độ bình th−ờng, chế độ nguồn giảm hoặc chế độ tắt (không sử dụng). Chế độ bình th−ờng tiêu thụ nhiều năng l−ợng hơn cho độ chính xác của tần số xung nhịp. Chế độ nguồn giảm luôn luôn đ−ợc dùng khi chíp đang ở trạng thái nguồn giảm (nghỉ) và có thể đ−ợc lựa chọn khi chíp đang hoạt động, nh−ng nó sẽ phát ra một nguồn xung nhịp có độ chính xác kém hơn so với chế độ bình th−ờng. 69 Tài liệu PSoC – biên dịch từ Datasheet bởi Nguyễn Xuân Sơn ĐKTĐ1 – K44 - ĐHBKHN 4.2.1. Thanh ghi ILO_TR Thanh ghi này đặt độ điều chỉnh cho ILO. Giá trị mặc định đ−ợc đặt vào những bit trim của thanh ghi trong quá trình khởi động. Nó dựa vào mặc định của nhà sản xuất. Nhà sản xuất khuyến cáo ng−ời sử dụng không đ−ợc thay đổi giá trị của thanh ghi này. Bit 7 và 6: Để dành (không dùng đến) Bit 5 và 4: Bias Trim. Hai bit đ−ợc sử dụng để đặt dòng điện bias trong nguồn dòng PTAT. Bit 5 đ−ợc nghịch đảo vì thế mà chế độ bias trung bình đ−ợc lựa chọn khi cả hai bit = 0. Dòng điện bias đ−ợc đặt theo bảng sau. Bảng 4 - 28: Dòng điện bias trong PTAT Bias Current Bit 5 Bit 4 Medium Bias 0 0 Maximum Bias 0 1 Minimum Bias 1 0 Not Needed * 1 1 * Cao hơn khoảng 15% so với chế độ Minimum Bias. Bit 3 tới bit 0: Freq Trim. Bốn bit đ−ợc sử dụng để cắt tần số. Bit 0 là bit có trọng số nhỏ nhất, bit 3 là bit có trọng số lớn nhất. Bit 3 đ−ợc nghịch đảo bên trong thanh ghi, bởi vậy, mã 8h sẽ làm cho tất cả các nguồn dòng tắt (tần số = 0 kHz). Một mã 0h sẽ bật nguồn dòng có trọng số lớn nhất (tần số = trung bình). Một mã 7h sẽ bật tất cả các nguồn dòng (tần số = lớn nhất). 4.3. Bộ tạo dao động thạch anh 32 kHz (ECO) Mạch tạo dao động thạch anh 32 kHz cho phép ng−ời sử dụng thay thế bộ tạo dao động bên trong (ILO) với một bộ tạo dao động bên ngoài với độ chính xác cao hơn, giá thành thấp và năng l−ợng tiêu hao ít. Bảng 4 - 29: Các thanh ghi của bộ dao động thạch anh Address Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Access 1,E0h OSC_CR0 32k Select PLL Mode No Buzz Sleep[1:0] CPU Speed [2:0] RW: 00 1,EBh ECO_TR PSSDC[1:0] W: 00 x,FEh CPU_SCR1 IRAMDIS RW: 00 Mạch tạo dao động thạch anh sử dụng một thạch anh giá rẻ và 2 tụ nhỏ là thành phần bên ngoài. Tất cả các thành phần khác đều nằm trong chíp PSoC. Bộ tạo dao động thạch anh có thể đ−ợc cấu hình để cung cấp một tham chiếu đến bộ tạo dao động bên trong (IMO) trong chế độ PLL (Phase Lock Loop) để tạo ra nguồn xung nhịp hệ thống 24 MHz với độ chính xác cao hơn. Chân XTALIn và XTALOut hỗ trợ kết nối với thạch anh 32.768 kHz. Để có thể sử dụng bộ dao động thạch anh bên ngoài thì bit 7 của thanh ghi điều khiển bộ dao động OSC_CR0 cần phải đ−ợc đặt = 1 (mặc định là 0). Thành phần bên ngoài chỉ là một thạch anh và 2 tụ nhỏ nối với Vcc. (xem hình vẽ). Chuyển đổi giữa bộ dao động ngoài và bộ dao động trong có thể làm cho bus hệ thống không đồng bộ. Trong tiến trình kích hoạt bộ ECO, nó cần một khoảng thời gian tách rời tr−ớc khi đ−ợc sử dụng nh− là một nguồn xung nhịp 32 kHz. Khoảng thời gian tách rời này đ−ợc bổ xung vào phần cứng bằng Sleep Timer. Vi ch−ơng trình (Firmware - phần mềm đ−ợc nạp cố định trong chíp) cần phải đ−ợc thiết lập thời gian nghỉ khoảng 1 giây (khoảng thời gian lớn nhất của ECO), và sau đó cho phép ECO bằng thanh ghi 70 Tài liệu về PSoC – Bản quyền thuộc Nguyễn Xuân Sơn – ĐKTĐ1 – K44 – ĐHBKHN OSC_CR0. Tại thời gian nghỉ 1 giây (ngắt của Sleep Timer), chuyển mạch sang ECO đ−ợc tạo ra bởi phần cứng. Nếu sau đó ECO không hoạt động thì ILO sẽ đ−ợc kích hoạt lại và chuyển mạch sẽ chuyển lại với ILO ngay lập tức. Các b−ớc của vi ch−ơng trình cần phải thực hiện trong việc chuyển đổi giữa bộ phát xung nhịp chậm nội tại sang bộ phát xung nhịp thạch anh 32kHz nh− sau: 1. Tại thời điểm reset, chip bắt đầu hoạt động và nó sử dụng bộ phát xung nhịp chậm nội tại. 2. Lựa chọn khoảng thời gian nghỉ 1 giây bằng bit[4:3] trong thanh ghi OSC_CRO nh− là khoảng thời gian để ổn định bộ phát xung nhịp. 3. Cho phép bộ pháp xung nhịp thạch anh 32kHz bằng cách đặt bit 7 trong thanh ghi OSC_CR0 lên 1. 4. Bộ phát xung nhịp thạch anh 32kHz trở thành nguồn xung nhịp đ−ợc lựa chọn tại điểm kết thúc của một giây nghỉ nói trên. Khoảng thời gian nghỉ cho phép bộ phát xung nhịp có thời gian để ổn định tr−ớc khi nó trở thành nguồn cung cấp xung nhịp. Ngắt Sleep không đ−ợc mở trong khi việc chuyển đổi đang diễn ra. Reset lại Sleep Timer để đảm bảo khoảng thời gian nghỉ cần thiết (nếu nh− nó không giao tiếp với bất cứ một hệ thống thời gian thực nào). L−u ý rằng bộ phát xung nhịp tốc độ thấp vẫn tiếp tục chạy cho đến khi chuyển hẳn sang bộ phát xung nhịp ngoài nhờ vào ngắt của Sleep Timer. 5. Một lời khuyên là nên đợi hết một giây để bộ phát xung nhịp ổn định rồi mới cho phép chế độ PLL chốt tần số bộ phát xung nhịp nội tại với tần số của bộ phát xung nhịp thạch anh 32kHz. L−u ý: a. Bộ phát xung nhịp nội tại sẽ đ−ợc chuyển trở lại ngay lập tức bằng cách viết giá trị 0 vào bit điều khiển [32k Select]. b. Nếu thiết lập thích hợp đ−ợc lựa chọn trong PSoC Designer thì những b−ớc trên sẽ đ−ợc thực hiện tự động trong file boot.asm c. Chuyển đổi phạm vi hai bộ phát xung nhịp có thể làm cho xung nhịp bus hệ thống không đồng bộ. Những chức năng yêu cầu xung nhịp 32k nên mở sau khi đã chuyển đổi xong. 4.4. Vòng chốt pha - Phase Locked Loop (PLL) Bảng 4 - 30: Thanh ghi của Phase Locked Loop Address Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Access 1,E0h OSC_CR0 32k Select PLL Mode No Buzz Sleep[1:0] CPU Speed [2:0] RW:00 1,E2h OSC_CR2 PLLGAIN EXTCLKEN IMODIS SYSCCKX2DIS RW:00 Chức năng PLL sẽ phát ra xung nhịp hệ thống với độ chính xác của thạch anh. Nó đ−ợc thiết kế để cung cấp một bộ phát xung nhịp 23.986 MHz khi sử dụng với thạch anh 32.768 kHz Mặc dù PLL ăn theo độ chính xác của thạch anh. Nó vẫn yêu cầu thời gian để chốt vào tần số chíp khi khởi động lần đầu. Độ dài của thời gian phụ thuộc vào PLLGAIN đ−ợc điều khiển bởi bit 7 trong thanh OSC_CR2. Nếu bit này đ−ợc giữ ở mức thấp thì thời gian chốt sẽ nhỏ hơn 10ms. Nếu bit này đ−ợc giữ ở mức cao thì thời gian chốt sẽ lớn hơn 50ms. Sau khi việc chốt hoàn tất thì bit này đ−ợc khuyến cáo là 71 Tài liệu PSoC – biên dịch từ Datasheet bởi Nguyễn Xuân Sơn ĐKTĐ1 – K44 - ĐHBKHN nên giữ ở mức cao để giảm sự bất ổn ở đầu ra. Nếu có thể v−ợt qua đ−ợc thời gian chốt dài hơn thì bit PLLGAIN có thể đ−ợc giữ ở mức cao trong suốt thời gian còn lại. Sau khi bộ phát xung nhịp thach anh bên ngoài đ−ợc lựa chọn và hoạt động thì những thủ tục sau đây sẽ cho phép chế độ PLL và cho phép chốt tần số thích hợp a. Chọn tần số CPU là 3 MHz hoặc nhỏ hơn b. Mở chế độ PLL c. Đợi 10 ms hay 50ms, phụ thuộc vào bit 7 trong thanh ghi OSC_CR2 d. Đặt tần số CPU lên cao hơn nếu muốn. Để làm việc này thì ta thay đổi giá trị các bit CPU Speed trong thanh ghi OSC_CR0. Tần số của CPU sẽ đ−ợc thay đổi ngay lập tức khi những bit này đ−ợc set. Nếu những thiết lập thích hợp đ−ợc lựa chọn trong PSoC Designer thì những b−ớc trên sẽ đ−ợc thực hiện tự động trong file boot.asm 4.5. Sleep and Watchdog Bảng 4 - 31: Những thanh ghi của Sleep và Watchdog. Address Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Access 0,E0h INT_MSK0 VC3 Sleep GPIO Analog3 Analog2 Analog1 Analog0 V Monitor RW:00 0,E3h RES_WDT WDSL_Clear[7:0] W:00 x,FEh CPU_SCR1 IRAMDIS RW:00 1,E0h OSC_CR0 32k Select PLL Mode No Buzz Sleep[1:0] CPU Speed [2:0] RW:00 1,E9h ILO_TR Bias Trim[1:0] Freq Trim[3:0] W:00 1,EBh ECO_TR PSSDC[1:0] W:00 x,FFh CPU_SCR0 GIES WDRS PORS Sleep STOP RW:XX Chỉ dẫn: X: Giá trị sau khi reset nguồn là không rõ x, Ký tự ‘x’ đứng tr−ớc dấu phẩy trong tr−ờng địa chỉ chỉ rõ rằng thanh ghi này có thể đ−ợc truy nhập mà không cần biết là dãy thanh ghi nào đang đ−ợc sử dụng Mục đích của chế độ nghỉ là để giảm năng l−ợng tiêu thụ trung bình của hệ thống đến mức có thể. Hệ thống đi vào chế độ nghỉ đ−ợc khởi tạo và điều khiển bởi vi ch−ơng trình. Trong trạng thái này, CPU đ−ợc dừng lại ở một biên giới lệnh và bộ phát xung nhịp 24/48 MHz, modun bộ nhớ Flash và điện áp tham chiếu band-gap giảm năng l−ợng tiêu thụ. Khối PSoC duy nhất còn hoạt động là bộ phát xung nhịp 32 kHz (bên ngoài hoặc bên trong). Khối PSoC bấm giờ từ sự lựa chọn xung nhịp 32kHz và mạch theo dõi điện áp cung cấp. Các khối PSoC t−ơng tự có hai chế độ giảm nguồn đ−ợc điều khiển bởi vi ch−ơng trình và độc lập với trạng thái nghỉ. Khối continuous time analog có thể vẫn hoạt động, từ khi chúng không yêu cầu nguồn xung nhịp. Tuy nhiên, khối analog SC sẽ không hoạt động từ lúc nguồn xung nhịp nội tại cung cấp cho chúng ngừng hoạt động. Hệ thống có thể chỉ đ−ợc đánh thức khỏi chế độ nghỉ bằng một yêu cầu ngắt hoặc sự kiện reset hệ thống. Đồng hồ nghỉ cung cấp những ngắt định kỳ để cho phép hệ thống thức dậy, thăm dò ngoại vi, thực hiện chức năng thời gian thực và sau đó lại đi vào chế độ nghỉ lần nữa. Ngắt của chân GPIO, ngắt theo dõi nguồn, ngắt của cột khối t−ơng tự, và nguồn xung nhịp ngoài hay xung nhịp 32k ở bên trong đ−ợc sử dụng làm mẫu để đồng bộ hóa những ngắt có thể đ−ợc dùng để đánh thức hệ thống dậy. Mạch định thời Watchdog đ−ợc thiết kế để sinh ra một ngắt cứng tới chíp sau một khoảng thời gian đ−ợc lập trình tr−ớc, trừ khi nó đ−ợc phục vụ một cách định kỳ trong vi ch−ơng trình. Chức năng này sẽ reset hệ thống nếu nh− CPU hoạt động sai. Nó cũng có thể reset nếu nh− hệ thống bị treo. 72 Tài liệu về PSoC – Bản quyền thuộc Nguyễn Xuân Sơn – ĐKTĐ1 – K44 – ĐHBKHN Một khi bộ định thời Watchdog đ−ợc mở thì nó chỉ có thể bị đóng từ một sự kiện reset bên ngoài (XRES) hay một sự kiện reset nguồn (POR). Một reset của bộ định thời Watchdog sẽ vẫn để watchdog hoạt động. Bởi vậy, nếu watchdog đ−ợc sử dụng trong một ứng dụng thì tất cả các mã (bao gồm cả mã khởi đầu) cần phải đ−ợc viết nh− thể là watchdog đang đ−ợc mở. 4.5.1. Mô tả cấu trúc Những thành phần của chíp cần phải có khi hoạt động ở chế độ nghỉ và watchdog là lựa chọn nguồn xung nhịp 32kHz (bên ngoài hoặc bên trong), với bộ định thời sleep, bit sleep trong thanh ghi CPU_SCR0, mạch sleep, mạch làm t−ơi band gap (để làm t−ơi điện áp tham chiếu một cách định kỳ), và bộ định thời watchdog. 4.5.1.1. Lựa chọn nguồn xung nhịp 32kHz Mặc định nguồn xung nhịp 32kHz đ−ợc lấy từ bộ phát xung nhịp nội tại tốc độ thấp (ILO). Có thể lựa chọn nguồn xung nhịp lấy từ bộ phát xung nhịp ngoài (ECO). Việc lựa chọn này đ−ợc thực hiện bằng cách thay đổi giá trị bit 7 trong thanh ghi OSC_CR0. Lựa chọn ECO là nguồn xung nhịp 32kHz sẽ cho phép bộ định thời sleep và ngắt của nó dùng trong ứng dụng thời gian thực. Cho dù nguồn xung nhịp nào đ−ợc lựa chọn thì nguồn xung nhịp 32kHz cũng giữ một vị trí then chốt trong chức năng nghỉ. Nó chạy liên tục và th−ờng xuyên đánh thức hệ thống dậy, nó cũng định kỳ làm t−ơi lại điện áp band gap trong suốt quá trình nghỉ. 4.5.1.2. Bộ định thời nghỉ Bộ định thời nghỉ là một bộ đếm tiến 15 bit bằng nguồn xung nhịp 32kHz lựa chọn, có thể là ILO hoặc ECO. Bộ định thời này luôn luôn đ−ợc hoạt động. Nếu một bộ ICE hoạt động ở chế độ gỡ rối và bit Stop trong thanh ghi OSC_CR0 đ−ợc set thì bộ định thời nghỉ sẽ bị vô hiệu hóa. Vì thế ng−ời sử dụng sẽ không có reset th−ờng xuyên của watchdog khi một điểm ngắt đ−ợc tìm ra trong tr−ờng gỡ rối. Nếu ngắt của bộ định thời nghỉ đ−ợc cho phép, một ngắt định kỳ tới CPU đ−ợc sinh ra dựa trên khoảng thời gian nghỉ lựa chọn trong thanh ghi OSC_CR0. Về mặt chức năng thì bộ định thời sleep không cần thiết phải trực tiếp kết hợp với trạng thái nghỉ. Nó có thể đ−ợc dùng nh− là một ngắt của bộ định thời đa mục đích cho dù hệ thống có đang ở trạng thái nghỉ hay không. Trạng thái reset của bộ định thời sleep là một giá trị đếm đến 0. Có hai cách để reset bộ định thời Sleep. Một là bất cứ reset phần cứng nào, ví dụ nh− reset nguồn (POR), reset ngoài hay watchdog reset. Hai là reset bộ định thời Sleep bằng vi ch−ơng trình. Lệnh viết giá trị 38h vào thanh ghi RES_WDT sẽ reset bộ định thời Sleep (l−u ý: bất cứ lệnh ghi giá trị vào thanh ghi RES_WDT đều reset lại bộ định thời watchdog). Xóa bộ định thời Sleep có thể đ−ợc làm bất cứ lúc nào để đồng bộ hóa hoạt động của bộ định thời Sleep với xử lý của CPU. Một ví dụ hay của việc này là sau khi reset nguồn (POR), ví dụ CPU đ−ợc giữ chậm để chờ điện áp tăng đủ, cũng rất quan trọng. Hơn nữa, mt phần quan trọng của phần mở đầu ch−ơng trình có thể đ−ợc yêu cầu. Trong khi đó thì bộ định thời Sleep sẽ bắt đầu đếm ngay sau khi POR và nó sẽ đếm đến một giá trị nào đó tại thời điểm mã của ng−ời sử dụng đ−ợc thi hành. Trong tr−ờng hợp này nên xóa bộ định thời Sleep tr−ớc khi cho phép ngắt khởi đầu của bộ định thời Sleep. Để chắc chắn rằng khoảng nghỉ đầu tiên sẽ bằng khoảng thời gian đặt tr−ớc. 4.5.1.3. Bit Sleep Chế độ nghỉ đ−ợc khởi đầu trong vi ch−ơng trình bằng cách thiết lập bit Sleep trong thanh ghi điều khiển hệ thống (CPU_SCR0). Để đánh thức hệ thống thì bit này 73 Tài liệu PSoC – biên dịch từ Datasheet bởi Nguyễn Xuân Sơn ĐKTĐ1 – K44 - ĐHBKHN cần phải đ−ợc xóa đồng thời với bất cứ một ngắt đ−ợc phép nào. Tuy nhiên, có hai tính năng đặc biệt của bit này đảm bảo hoạt động của Sleep đúng cách. Thứ nhất, lệnh ghi để đặt bit này lên 1 đ−ợc ngăn chặn, nếu một ngắt đảm nhiệm giới hạn lệnh đó. Thứ hai, có một khóa liên động để đảm bảo rằng một khi nó đ−ợc set, bit sleep có thể không bị xóa bởi một ngắt đến trừ khi là mạch nghỉ đã hoàn thành xong một chuỗi sự kiện nghỉ và tín hiệu giảm năng l−ợng của hệ thống đ−ợc xác nhận. Điều này sẽ ngăn chặn mạch sleep khỏi ngắt trong giữa tiến trình hệ thống đang ở trạng thái giảm năng l−ợng và có lẽ sẽ để hệ thống ở một trạng thái không xác định. 4.5.2. L−u ý khi sử dụng chế độ nghỉ trong ứng dụng Những phần sau đây sẽ nêu vài l−u ý về chế độ nghỉ và liên hệ của nó với vi ch−ơng trình và phần mềm ứng dụng. a. Nếu một ngắt đang chờ, đ−ợc cho phép và đ−ợc lập lịch để thi hành tại lệnh cuối cùng sau khi viết vào bit sleep thì hệ thống sẽ không đi vào chế độ nghỉ. Lệnh sẽ vẫn đ−ợc thi hành, nh−ng nó sẽ không thể set đ−ợc bit sleep trong thanh ghi CPU_SCR0. Thay vào đó thì lệnh sẽ đ−ợc thi hành và tác động của lệnh nghỉ bị bỏ qua. b. Bit cho phép ngắt toàn cục không cần thiết phải đ−ợc mở để đánh thức hệ thống khỏi trạng thái nghỉ. Các bit cho phép ngắt độc lập với nhau và có khả năng đ−ợc thiết lập trong thanh ghi mặt nạ che ngắt. Nếu bit cho phép ngắt toàn cục không đ−ợc set thì CPU sẽ không thực hiện trình phục vụ ngắt liên quan tới ngắt đó. Tuy nhiên, hệ thống sẽ bị đánh thức và tiếp tục thi hành các lệnh tại thời điểm mà nó đi vào trạng thái nghỉ. Trong tr−ờng hợp này thì ng−ời sử dụng phải xóa ngắt chờ một cách thủ công, hoặc có thể mở bit cho phép ngắt toàn cục rồi sau đó để cho CPU thi hành trình phục vụ ngắt. Nếu một ngắt chờ không đ−ợc xóa thì nó sẽ vẫn tiếp tục xác nhận, và mặc dù bit sleep đ−ợc ghi và chuỗi sự kiện nghỉ đ−ợc thi hành, ngay khi chíp đi vào chế độ nghỉ, bit sleep sẽ bị xóa bởi ngắt chờ và hệ thống sẽ thoát khỏi chế độ nghỉ. c. Khi thức dậy, lệnh nằm ngay sau lệnh nghỉ sẽ đ−ợc thi hành tr−ớc trình phục vụ ngắt (nếu cho phép). Lệnh nằm ngay sau lệnh nghỉ đ−ợc dừng lại tr−ớc khi hệ thống đi vào chế độ nghỉ. Bởi vậy, khi một ngắt xảy ra và đánh thức hệ thống dậy thì lệnh ngay sau lệnh nghỉ sẽ đ−ợc thi hành và khi đó thì trình phục vụ ngắt cũng đ−ợc thi hành. (Nếu bit cho phép ngắt toàn cục đ−ợc set, thực hiện lệnh sẽ chỉ tiếp tục tại nơi mà nó bỏ dở tr−ớc khi đi vào chế độ nghỉ.) d. Nếu chế độ PLL đ−ợc mở thì tần số của CPU cần phải đ−ợc giảm xuống 3MHz tr−ớc khi đi vào chế độ nghỉ. Khuyến cáo là nên đợi 10ms sau khi hệ thống thức dậy để đảm bảo tần số hoạt động bình th−ờng của CPU đ−ợc khôi phục. e. Năng l−ợng của phần t−ơng tự cần phải đ−ợc tắt bằng vi ch−ơng trình tr−ớc khi đi vào chế độ nghỉ. Chế độ nghỉ của hệ thống sẽ không điều khiển mảng t−ơng tự. Có nhiều cách điều khiển nguồn năng l−ợng độc lập cho mỗi khối t−ơng tự và nhiều cách điều khiển nguồn năng l−ợng chính trong khối tham chiếu. Cách điều khiển nguồn năng l−ợng cần phải đ−ợc thực hiện bởi vi ch−ơng trình. f. Nếu bit cho phép ngắt toàn cục bị đóng, nó chỉ có thể đ−ợc mở một cách an toàn sau lệnh viết vào bit sleep. Nó th−ờng gây rắc rối khi có một ngắt ở lệnh cuối cùng ngay tr−ớc lệnh ghi vào bit sleep. Điều này có nghĩa là tại thời điểm quay về từ ngắt, lệnh nghỉ sẽ đ−ợc thi hành và có thể bỏ qua bất cứ một sự chuẩn bị nào của vi ch−ơng trình cần thiết phải thực hiện theo trình tự để đi vào chế độ nghỉ. Để ngăn chặn điều này thì cần phải cấm các ngắt tr−ớc khi đi vào chế độ 74 Tài liệu về PSoC – Bản quyền thuộc Nguyễn Xuân Sơn – ĐKTĐ1 – K44 – ĐHBKHN nghỉ. Sau khi chuẩn bị cho chế độ nghỉ, cho phép ngắt toàn cục và viết vào bit sleep với hai lệnh liên tiếp sau: and f,~01h // vô hiệu hóa ngắt toàn cục (chuẩn bị cho chế độ nghỉ, có thể có nhiều lệnh) or f,01h // cho phép ngắt toàn cục mov reg[ffh],08h // đ−a hệ thống vào chế độ nghỉ. Do khoảng thời gian của lệnh cho phép ngắt toàn cục là rất nhỏ nên khó có thể có một ngắt sẽ xảy ra ngay sau lệnh trên. Ngắt sớm nhất có thể xảy ra là sau lệnh tiếp theo (là lệnh đ−a hệ thống vào chế độ nghỉ) đã đ−ợc thi hành. Bởi vậy, nếu một ngắt đang chờ và lệnh nghỉ đ−ợc thi hành nh− đ−ợc mô tả trong mục (a) thì lệnh nghỉ sẽ đ−ợc bỏ qua. Lệnh đầu tiên đ−ợc thi hành sau trình phục vụ ngắt sẽ là lệnh nằm ngay sau lệnh nghỉ. 4.5.2.1. Đánh thức hệ thống. Một khi hệ thống đã ở trạng thái nghỉ thì sự kiện duy nhất có thể đánh thức hệ thống là một ngắt. Bit cho phép ngắt toàn cục trong thanh ghi CPU_F không cần thiết phải đ−ợc set. Bất cứ một ngắt không bị che nào đều có thể đánh thức hệ thống dậy. Một lựa chọn cho CPU là có thi hành ngắt đó hay không sau khi hệ thống bị đánh thức. Dãy sự kiện đánh thức hệ thống đ−ợc đồng bộ với xung nhịp 32kHz với mục đích tạo độ trễ khi khởi động lại, cho phép Module bộ nhớ Flash có đủ thời gian để khôi phục lại mức năng l−ợng hoạt động tr−ớc khi CPU phát ra lệnh đọc đầu tiên. Một lý do khác cho sự trễ đó là để cho phép IMO, Bandgap, mạch LVD /POR có thời gian ổn định tr−ớc khi đi vào hoạt động. Dãy sự kiện đánh thức hệ thống đ−ợc chỉ ra trong Hình 4-6 và đ−ợc mô tả nh− sau: a. Khi một ngắt đánh thức xảy ra và đ−ợc đồng bộ hóa với s−ờn âm của xung nhịp 32kHz. b. Tại s−ờn d−ơng tiếp theo của nguồn xung nhịp, tín hiệu giảm nguồn hệ thống đ−ợc đảo lại. Module b nhớ Flash, IMO và mạch bandgap đ−ợc cấp năng l−ợng ở trạng thái hoạt động bình th−ờng. c. Tại s−ờn d−ơng tiếp theo của xung nhịp 32kHz, giá trị chính xác rõ ràng của POR và LVD đã ổn định và đ−ợc lấy mẫu. d. Tại s−ờn âm tiếp theo của xung nhịp 32kHz ( sau khoảng 15 us), tín hiệu BRQ đ−ợc đảo lại nhờ mạch logic nghỉ. Trên s−ờn tiếp theo của CPUCKL, tín hiệu BRA đ−ợc đảo lại bởi CPU và lệnh thi hành tiếp tục. Thời gian đánh thức hệ thống là từ 75 đến 105 us. 75 Tài liệu PSoC – biên dịch từ Datasheet bởi Nguyễn Xuân Sơn ĐKTĐ1 – K44 - ĐHBKHN Hình 4-6: Biều đồ dãy các sự kiện đánh thức hệ thống 4.5.2.2. Làm t−ơi bandgap Trong suốt quá trình hoạt động bình th−ờng, mạch bandgap cung cấp cho hệ thống một điện áp tham chiếu (VREF) để sử dụng cho các khối t−ơng tự, bộ nhớ Flash và mạch phát hiện điện áp thấp (LVD). Bình th−ờng đầu ra của bandgap đ−ợc nối trực tiếp đến tín hiệu VREF. Tuy nhiên, trong trạng thái ngủ thì khối sinh điện áp tham chiếu và mạch phát hiện điện áp thấp hoàn toàn đ−ợc giảm năng l−ợng. Khối bandgap và LVD đ−ợc mở lại định kỳ trong suốt quá trình nghỉ để theo dõi điện áp thấp. Điều này đ−ợc thực hiện bằng cách bật bandgap một cách định kỳ, cho một khoảng thời gian khởi động bằng nguyên một xung nhịp 32kHz, và kết nối nó tới VREF để làm t−ơi lại điện áp tham chiếu trong nguyên một xung nhịp 32kHz tiếp theo nh− đ−ợc chỉ trong Hình 4-7. Trong khoảng thời gian xung nhịp thứ hai của chu kỳ làm t−ơi, mạch LVD đ−ợc cho phép để ổn định trong suốt khoảng thời gian xung nhịp 32kHz ở mức cao. Trong khoảng thời gian xng nhịp thứ hai ở mức thấp, ngắt LVD đ−ợc cho phép xảy ra. 76 Tài liệu về PSoC – Bản quyền thuộc Nguyễn Xuân Sơn – ĐKTĐ1 – K44 – ĐHBKHN - Bandgap is turn on, but not yet connected to VREF: Bandgap đ−ợc bật, nh−ng vẫn ch−a đ−ợc nối với VREF - Bandgap output is connected to VREF. Voltage is refreshed: Đầu ra bandgap đ−ợc nối với VREF - Bandgap is powered down until next refresh cycle: Bandgap đ−ợc giảm nguồn cho đến chù kỳ làm t−ơi tiếp theo. - VREF is slowly leaking to ground: VREF bị rò rỉ điện áp xuống đất một cách chậm chạp. - Low voltage monitors are active during CLK32 low: Bộ theo dõi điện áp thấp đ−ợc kích hoạt trong xuốt quá trình CLK32 ở mức thấp. Hình 4-7: Hoạt động làm t−ơi bandgap Tốc độ làm t−ơi tỷ lệ với tốc độ xung nhịp 32kHz và đ−ợc điều khiển bởi chu kỳ nhiệm vụ nghỉ của hệ thống. (Power System Sleep Duty Cycle). PSSDC, bit[7:6] của thanh ghi ECO_TR. Bảng 4 - 32 liệt kê một số giá trị có thể lựa chọn. Thiết lập mặc định (128 lần đếm cho bộ định thời nghỉ) thích hợp với nhiều ứng dụng, dòng điện tiêu tốn trung bình d−ới 5uA. Bảng 4-32: Bảng lựa chọn chu kỳ nhiệm vụ nghỉ của hệ thống PSSDC Số đếm của bộ định thời nghỉ Thời gian t−ơng ứng 00b (mặc định) 256 8 ms 01b 1024 31.2 ms 10b 64 2 ms 11b 16 500 us 4.5.2.3. Bộ định thời Watchdog (WDT) Tại thời điểm khởi động chíp, WDT khởi đầu là bị đóng. Bit PORS trong thanh ghi điều khiển hệ thống sẽ điều khiển mở WDT. Tại lúc khởi động bit PORS khởi đầu đ−ợc đặt là 1, nó chỉ rõ rằng hoặc sự kiện POR hay XRES đã xảy ra. WDT đ−ợc mở bằng cách xóa bit PORS. Một khi bit này đ−ợc xóa và bộ định thời watchdog đi vào hoạt động thì nó sẽ không thể bị đóng (vì bit PORS không thể đ−ợc set lên 1 bởi vi ch−ơng trình, nó chỉ có thể bị xóa). Cách duy nhất để vô hiệu hóa chức năng watchdog sau khi nó đã đ−ợc mở là thông qua POR hay XRES. Mặc dù WDT bị vô hiệu hóa từ lúc POR hay XRES cho đến hết mã khởi đầu, nh−ng toàn bộ mã ch−ơng trình nên đ−ợc viết nh− thể là nó đang đ−ợc mở. (WDT cần phải đ−ợc xóa một cách định kỳ). Lý do là vì trong mã khởi đầu sau sự kiện WDR (watchdog reset), bộ định thời watchdog đ−ợc mở và tất cả các mã ch−ơng trình cần phải biết điều này. Bộ định thời watchdog bằng ba lần đếm đầu ra ngắt của bộ định thời nghỉ và vì vậy, khoảng thời gian watchdog bằng 3 lần khoảng thời gian lựa chọn của bộ định thời nghỉ. Khi ngắt của bộ định thời nghỉ đ−ợc xác nhận, bộ định thời watchdog bắt đầu tăng. Khi bộ đếm đếm đến ba, giá trị đếm cuối đ−ợc xác nhận. Giá trị đếm cuối này đ−ợc ghi nhận bởi xung nhịp 32kHz. Bởi vây, tín hiệu reset Watchdog sẽ chuyển lên mức cao sau xung nhịp 32kHz tiếp theo và đ−ợc giữ để xác nhận trong một chu kỳ. Bộ Flip-Flop ghi nhận giá trị đếm cuối của WDT không đ−ợc reset bởi tín hiệu reset WDT khi nó đ−ợc xác nhận, nh−ng lại đ−ợc reset bởi bất cứ một reset nào khác. 77 Tài liệu PSoC – biên dịch từ Datasheet bởi Nguyễn Xuân Sơn ĐKTĐ1 – K44 - ĐHBKHN Hình 4 - 8: Watchdog reset Một khi đ−ợc cho phép thì WDT cần phải đ−ợc xóa một cách định kỳ bởi vi ch−ơng trình. Điều này đ−ợc thực hiện với một lệnh viết vào thanh ghi RES_WDT. Lệnh viết này là một giá trị không phụ thuộc, vì thế bất cứ lệnh ghi nào đều xóa bộ định thời watchdog. Nếu vì một lý do nào đó mà vi ch−ơng trình không xóa watchdog trong khoảng thời gian lựa chọn thì mạch WDT sẽ sinh ra một WDR (watchdog reset) tới chíp. WDR t−ơng đ−ơng với những reset khác. Tất cả các thanh ghi đều đ−ợc đ−a về giá trị mặc định. Một điều quan trọng cần phải nhớ về reset Watchdog là nó là khởi đầu RAM có thể bị đóng (IRAM trong thanh ghi CPU_SCR1). Trong tr−ờng hợp này, thành phần của SRAM không bị ảnh h−ởng, vì thế khi WDR xảy ra thì các biến của ch−ơng trình tồn tại xuyên qua sự kiện reset này. Trong ứng dụng thực hành thì phải biết rằng khoảng thời gian của bộ định thời Watchdog nằm vào khoảng 2 đến 3 lần khoảng thời gian của bộ định thời nghỉ. Cách duy nhất để đảm bảo khoảng thời gian watchdog bằng đủ 3 lần khoảng thời gian của bộ định thời nghỉ là xóa bộ định thời nghỉ khi xóa thanh ghi WDT. Nh−ng điều này là không thể trong những ứng dụng sử dụng bộ định thời nghỉ nh− là một đồng hồ thời gian thực. Trong tr−ờng hợp này thì vi ch−ơng trình xóa thanh ghi WDT mà không xóa bộ định thời nghỉ, điều này có thể xảy ra tại bất cứ điểm nào trong khoảng thời gian nghỉ. Nếu nó xảy ra ở gần giá trị cuối của bộ định thời nghỉ thì kết quả là khoảng thời gian WDT sẽ chỉ lớn hơn 2 lần khoảng thời gian nghỉ. 78 Tài liệu về PSoC – Bản quyền thuộc Nguyễn Xuân Sơn – ĐKTĐ1 – K44 – ĐHBKHN Ch−ơng 5: Hệ thống khối PSoC Số Cấu trúc của hệ thống số. Hình vẽ d−ới đây mô tả cấu trúc cao nhất của hệ thống số trong PSoC. Mỗi thành phần đều đ−ợc mô tả chi tiết trong phần này. Hình 5 - 1: Sơ đồ khối mô tả cấu trúc các khối số trong PSoC Các thanh ghi số Bảng sau đây liệt kê toàn bộ các thanh ghi số của hệ thống số trong PSoC Bảng 5 - 1: Bảng thống kê các thanh ghi số Address Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Access GLOBAL DIGITAL INTERCONNECT (GDI) REGISTERS 1,D0h GDI_O_IN GIONOUT7 GIONOUT6 GIONOUT5 GIONOUT4 GIONOUT3 GIONOUT2 GIONOUT1 GIONOUT0 RW : 00 1,D1h GDI_E_IN GIENOUT7 GIENOUT6 GIENOUT5 GIENOUT4 GIENOUT3 GIENOUT2 GIENOUT1 GIENOUT0 RW : 00 1,D2h GDI_O_OU GOOUTIN7 GOOUTIN6 GOOUTIN5 GOOUTIN4 GOOUTIN3 GOOUTIN2 GOOUTIN1 GOOUTIN0 RW : 00 1,D3h GDI_E_OU GOEUTIN7 GOEUTIN6 GOEUTIN5 GOEUTIN4 GOEUTIN3 GOEUTIN2 GOEUTIN1 GOEUTIN0 RW : 00 DIGITAL ROW REGISTERS x,B0h RDI0RI RI3[1:0] RI2[1:0] RI1[1:0] RI0[1:0] RW : 00 x,B1h RDI0SYN RI3SYN RI2SYN RI1SYN RI0SYN RW : 00 x,B2h RDI0IS BCSEL[1:0] IS3 IS2 IS1 IS0 RW : 00 x,B3h RDI0LT0 LUT1[3:0] LUT0[3:0] RW : 00 x,B4h RDI0LT1 LUT3[3:0] LUT2[3:0] RW : 00 x,B5h RDI0RO0 GOO5EN GOO1EN GOE5EN GOE1EN GOO4EN GOO0EN GOE4EN GOE0EN RW : 00 x,B6h RDI0RO1 GOO7EN GOO3EN GOE7EN GOE3EN GOO6EN GOO2EN GOE6EN GOE2EN RW : 00 x,B8h RDI1RI RI3[1:0] RI2[1:0] RI1[1:0] RI0[1:0] RW : 00 x,B9h RDI1SYN RI3SYN RI2SYN RI1SYN RI0SYN RW : 00 x,BAh RDI1IS BCSEL[1:0] IS3 IS2 IS1 IS0 RW : 00 x,BBh RDI1LT0 LUT1[3:0] LUT0[3:0] RW : 00 x,BCh RDI1LT1 LUT3[3:0] LUT2[3:0] RW : 00 x,BDh RDI1RO0 GOO5EN GOO1EN GOE5EN GOE1EN GOO4EN GOO0EN GOE4EN GOE0EN RW : 00 79 Tài liệu PSoC – biên dịch từ Datasheet bởi Nguyễn Xuân Sơn ĐKTĐ1 – K44 - ĐHBKHN x,BEh RDI1RO1 GOO7EN GOO3EN GOE7EN GOE3EN GOO6EN GOO2EN GOE6EN GOE2EN RW : 00 DIGITAL BLOCK REGISTERS Data and Control Register 0,20h DBB00DR0 Data[7:0] # : 00 0,21h DBB00DR1 Data[7:0] W : 00 0,22h DBB00DR2 Data[7:0] # : 00 0,23h DBB00CR0 Function Control/Status bit for selected function[6:0] Enable # : 00 1,20h DBB00FN Data Invert BCEN End/Single Mode[1:0] Function[2:0] RW : 00 1,21h DBB00IN Data Input[3:0] Clock Input[3:0] RW : 00 1,22h DBB00OU AUXCLK AUXEN AUX IO Select[1:0] OUTEN Output Select[1:0] RW : 00 0,24h DBB01DR0 Data[7:0] # : 00 0,25h DBB01DR1 Data[7:0] W : 00 0,26h DBB01DR2 Data[7:0] # : 00 0,27h DBB01CR0 Function Control/Status bit for selected function[6:0] Enable # : 00 1,24h DBB01FN Data Invert BCEN End/Single Mode[1:0] Function[2:0] RW : 00 1,25h DBB01IN Data Input[3:0] Clock Input[3:0] RW : 00 1,26h DBB01OU AUXCLK AUXEN AUX IO Select[1:0] OUTEN Output Select[1:0] RW : 00 0,28h DBB02DR0 Data[7:0] # : 00 0,29h DBB02DR1 Data[7:0] W : 00 0,2Ah DBB02DR2 Data[7:0] # : 00 0,2Bh DBB02CR0 Function Control/Status bit for selected function[6:0] Enable # : 00 1,28h DBB02FN Data Invert BCEN End/Single Mode[1:0] Function[2:0] RW : 00 1,29h DBB02IN Data Input[3:0] Clock Input[3:0] RW : 00 1,2Ah DBB02OU AUXCLK AUXEN AUX IO Select[1:0] OUTEN Output Select[1:0] RW : 00 0,2Ch DBB03DR0 Data[7:0] # : 00 0,2Dh DBB03DR1 Data[7:0] W : 00 0,2Eh DBB03DR2 Data[7:0] # : 00 0,2Fh DBB03CR0 Function Control/Status bit for selected function[6:0] Enable # : 00 1,2Ch DBB03FN Data Invert BCEN End/Single Mode[1:0] Function[2:0] RW : 00 1,2Dh DBB03IN Data Input[3:0] Clock Input[3:0] RW : 00 1,2Eh DBB03OU AUXCLK AUXEN AUX IO Select[1:0] OUTEN Output Select[1:0] RW : 00 0,30h DBB10DR0 Data[7:0] # : 00 0,31h DBB10DR1 Data[7:0] W : 00 0,32h DBB10DR2 Data[7:0] # : 00 0,33h DBB10CR0 Function Control/Status bit for selected function[6:0] Enable # : 00 1,30h DBB10FN Data Invert BCEN End/Single Mode[1:0] Function[2:0] RW : 00 1,31h DBB10IN Data Input[3:0] Clock Input[3:0] RW : 00 1,32h DBB10OU AUXCLK AUXEN AUX IO Select[1:0] OUTEN Output Select[1:0] RW : 00 0,34h DBB11DR0 Data[7:0] # : 00 0,35h DBB11DR1 Data[7:0] W : 00 0,36h DBB11DR2 Data[7:0] # : 00 0,37h DBB11CR0 Function Control/Status bit for selected function[6:0] Enable # : 00 1,34h DBB11FN Data Invert BCEN End/Single Mode[1:0] Function[2:0] RW : 00 1,35h DBB11IN Data Input[3:0] Clock Input[3:0] RW : 00 1,36h DBB11OU AUXCLK AUXEN AUX IO Select[1:0] OUTEN Output Select[1:0] RW : 00 0,38h DBB12DR0 Data[7:0] # : 00 0,39h DBB12DR1 Data[7:0] W : 00 0,3Ah DBB12DR2 Data[7:0] # : 00 0,3Bh DBB12CR0 Function Control/Status bit for selected function[6:0] Enable # : 00 1,38h DBB12FN Data Invert BCEN End/Single Mode[1:0] Function[2:0] RW : 00 1,39h DBB12IN Data Input[3:0] Clock Input[3:0] RW : 00 1,3Ah DBB12OU AUXCLK AUXEN AUX IO Select[1:0] OUTEN Output Select[1:0] RW : 00 0,3Ch DBB13DR0 Data[7:0] # : 00 0,3Dh DBB13DR1 Data[7:0] W : 00 0,3Eh DBB13DR2 Data[7:0] # : 00 0,3Fh DBB13CR0 Function Control/Status bit for selected function[6:0] Enable # : 00 1,3Ch DBB13FN Data Invert BCEN End/Single Mode[1:0] Function[2:0] RW : 00 1,3Dh DBB13IN Data Input[3:0] Clock Input[3:0] RW : 00 1,3Eh DBB13OU AUXCLK AUXEN AUX IO Select[1:0] OUTEN Output Select[1:0] RW : 00 Interrupt Mask Register 0,E1h INT_MSK1 DCB13 DCB12 DBB11 DBB10 DCB03 DCB02 DBB01 DBB00 RW : 00 Chỉ dẫn: Ký hiệu ‘ # ’ có nghĩa là truy nhập theo một cách riêng. Ký hiệu ‘ x ‘ nằm trong tr−ờng địa chỉ cho biết thanh ghi có thể đ−ợc truy nhập mà không cần biết dãy thanh ghi nào đang đ−ợc sử dụng. 80 Tài liệu về PSoC – Bản quyền thuộc Nguyễn Xuân Sơn – ĐKTĐ1 – K44 – ĐHBKHN 1. Liên kết số toàn cục (Global Digital Interconnect - GDI) GDI là một cấu hình kết nối trong dãy tín hiệu hỗn hợp PSoC có mức độ chung nhất. Bảng 5 - 2: Các thanh ghi của GDI Address Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Access 1,D0h GDI_O_IN GIONOUT7 GIONOUT6 GIONOUT5 GIONOUT4 GIONOUT3 GIONOUT2 GIONOUT1 GIONOUT0 RW : 00 1,D1h GDI_E_IN GIENOUT7 GIENOUT6 GIENOUT5 GIENOUT4 GIENOUT3 GIENOUT2 GIENOUT1 GIENOUT0 RW : 00 1,D2h GDI_O_OU GOOUTIN7 GOOUTIN6 GOOUTIN5 GOOUTIN4 GOOUTIN3 GOOUTIN2 GOOUTIN1 GOOUTIN0 RW : 00 1,D3h GDI_E_OU GOEUTIN7 GOEUTIN6 GOEUTIN5 GOEUTIN4 GOEUTIN3 GOEUTIN2 GOEUTIN1 GOEUTIN0 RW : 00 GDI bao gồm bốn đ−ờng bus 8 bit. Hai đ−ờng bus là bus đầu vào cho phép tín hiệu đi từ chân của chíp vào CPU. Những bus này đ−ợc gọi là Global Input Odd (GIO[7:0]) và Global Input Even (GIE[7:0]). Hai bus khác là bus đầu ra cho phép tín hiệu đi từ CPU đến các chân của chíp. Chúng đ−ợc gọi là Global Output Odd (GOO[7:0]) và Global Output Even (GOE[7:0]). Từ “Odd” và “Even” trong phần tên của bus chỉ ra rằng cổng nào của chíp có thể đ−ợc kết nối với bus. Những đ−ờng Bus có tên “Odd” đ−ợc kết nối với tất cả các cổng đ−ợc đánh số lẻ và những bus có tên “Even” đ−ợc kết nối với tất cả các cổng đ−ợc đánh số chẵn. L−u ý rằng từ Odd và Even trong tên bus ám chỉ các cổng chứ không phải là các chân. Có hai đầu tới tín hiệu GDI và các chân của cổng. Một đầu đầu đ−ợc cấu hình nh− là một nguồn hay một đích. Ví dụ, một chân GPIO có thể cấu hình để cấp tín hiệu cho đầu vào toàn cục hay nhận tín hiệu từ một đầu ra toàn cục. Có hai kiểu tín hiệu đ−ợc kết nối với bus toàn cục. Những khối số đ−ợc sử dụng nh− là một nguồn hay đích cho mạng toàn cục, và xung nhịp hệ thống có thể đ−ợc dùng để cung cấp xung nhịp cho những thành phần cần thiết thông qua mạng toàn cục. Bảng 5-3: Sự sắp xếp bus toàn cục tới các cổng Global Bus Ports GIO[7:0], GOO[7:0] P1, P3, P5 GIE[7:0], GOE[7:0] P0, P2, P4 Vì có nhiều cổng cùng kết nối với một đ−ờng bus toàn cục nên có một cách sắp đặt một tới nhiều (one-to-many) giữa các đ−ờng nối của một bus toàn cục và các chân của cổng vào ra. Ví dụ, Nếu GIO[1] đ−ợc sử dụng để đ−a một tín hiệu đầu vào tới một khối PSoC số thì một trong các chân P1[1], P3[1], P5[1] có thể đ−ợc sử dụng. Đầu ra cũng t−ơng tự nh− vậy. Ví dụ, Nếu GOE[3] đ−ợc sử dụng để mang một tín hiệu từ khối PSoC số đến một chân vào ra thì bất cứ chân nào trong các chân P0[3], P2[3], P4[3] đều có thể đ−ợc sử dụng. 1.1. Mô tả kiến trúc. Mục đích chính của biểu đồ khối kiến trúc là để trao đổi thông tin giữa bus toàn cục và các cổng vào ra. L−u ý rằng bất cứ đầu vào nào đều có thể đ−ợc nối với đầu ra t−ơng ứng của nó, sử dụng bộ đệm ba trạng thái đ−ợc đặt ở 4 góc của hình vẽ. Hơn nữa, đầu ra toàn cục có thể đ−ợc nối tắt với đầu vào toàn cục bằng bộ đệm ba trạng thái. Hình chữ nhật nằm ở giữa của hình vẽ đại diện cho dãy các khối PSoC số. 81 Tài liệu PSoC – biên dịch từ Datasheet bởi Nguyễn Xuân Sơn ĐKTĐ1 – K44 - ĐHBKHN Hình 5-2: Sơ đồ cấu trúc liên kết vào ra số 1.2. Thanh ghi GDI_O_IN và GDI_E_IN Sử dụng bit thiết lập trong các thanh ghi GDI_x_IN, mạng đầu vào toàn cục có thể đ−ợc cấu hình để kích thích mạng đầu ra t−ơng ứng của nó. Ví dụ, GIE[7] → GOE[7]. Có tất cả 16 bit điều khiển khả năng kết nối giữa đầu vào toàn cục và đầu ra toàn cục. Những bit này nằm trong thanh ghi GDI_O_IN và GDI_E_IN. Bảng sau đây liệt kê ý nghĩa của từng vị trí bit trong thanh ghi GDI_O_IN và GDI_E_IN. 82 Tài liệu về PSoC – Bản quyền thuộc Nguyễn Xuân Sơn – ĐKTĐ1 – K44 – ĐHBKHN Bảng 5-4: Thanh ghi GDI_x_IN GDI_x_IN[0] 0: Không kết nối giữa GIx[0] và GOx[0] 1: Cho phép GIx[0] kích thích GOx[0] GDI_x_IN[1] 0: Không kết nối giữa GIx[1] và GOx[1] 1: Cho phép GIx[1] kích thích GOx[1] GDI_x_IN[2] 0: Không kết nối giữa GIx[2] và GOx[2] 1: Cho phép GIx[2] kích thích GOx[2] GDI_x_IN[3] 0: Không kết nối giữa GIx[3] và GOx[3] 1: Cho phép GIx[3] kích thích GOx[3] GDI_x_IN[4] 0: Không kết nối giữa GIx[4] và GOx[4] 1: Cho phép GIx[4] kích thích GOx[4] GDI_x_IN[5] 0: Không kết nối giữa GIx[5] và GOx[5] 1: Cho phép GIx[5] kích thích GOx[5] GDI_x_IN[6] 0: Không kết nối giữa GIx[6] và GOx[6] 1: Cho phép GIx[6] kích thích GOx[6] GDI_x_IN[7] 0: Không kết nối giữa GIx[7] và GOx[] 1: Cho phép GIx[7] kích thích GOx[7] 1.3. Thanh ghi GDI_O_OU và GDI_E_OU. Những bit cấu hình thêm đ−ợc đ−a ra trong thanh ghi GDI_x_OU. Nó cho phép đầu ra toàn cục kích thích đầu vào toàn cục t−ơng ứng. Ví dụ, GOE[7] → GIE[7]. Có tất cả 16 bit điều khiển khả năng kết nối giữa đầu ra toàn cục và đầu vào toàn cục. Những bit này nằm trong thanh ghi GDI_O_OU và GDI_E_OU. Bảng sau đây liệt kê ý nghĩa của từng vị trí bit trong thanh ghi GDI_O_OU và GDI_E_OU. Bảng 5-5: Thanh ghi GDI_x_OU GDI_x_OU[0] 0: Không kết nối giữa GIx[0] và GOx[0] 1: Cho phép GOx[0] kích thích GIx[0] GDI_x_OU[1] 0: Không kết nối giữa GIx[1] và GOx[1] 1: Cho phép GOx[1] kích thích GIx[1] GDI_x_OU[2] 0: Không kết nối giữa GIx[2] và GOx[2] 1: Cho phép GOx[2] kích thích GIx[2] GDI_x_OU[3] 0: Không kết nối giữa GIx[3] và GOx[3] 1: Cho phép GOx[3] kích thích GIx[3] GDI_x_OU[4] 0: Không kết nối giữa GIx[4] và GOx[4] 1: Cho phép GOx[4] kích thích GIx[4] GDI_x_OU[5] 0: Không kết nối giữa GIx[5] và GOx[5] 1: Cho phép GOx[5] kích thích GIx[5] GDI_x_OU[6] 0: Không kết nối giữa GIx[6] và GOx[6] 1: Cho phép GOx[6] kích thích GIx[6] GDI_x_OU[7] 0: Không kết nối giữa GIx[7] và GOx[] 1: Cho phép GOx[7] kích thích GIx[7] Khả năng cấu hình của GDI không cho phép đ−ờng nối chẵn và đ−ờng nối lẻ hay đ−ờng nối với chỉ số khác nhau nối đ−ợc với nhau. Chẳng hạn những kết nối sau đây là không thể có trong chíp PSoC. GOE[7] → GIO[7] GOE[0] → GIE[7] 83 Tài liệu PSoC – biên dịch từ Datasheet bởi Nguyễn Xuân Sơn ĐKTĐ1 – K44 - ĐHBKHN 2. Kết nối dãy các khối số (Array Digital Interconnect - ADI) Dãy các khối PSoC sử dụng một kiến trúc leo thang đ−ợc thiết kế để hỗ trợ từ một tới bốn hàng khối PSoC số. Phần kết nối theo dãy (ADI) không có một sự kết nối có thể cấu hình nào cả, bởi vậy nó cũng chẳng sử dụng một thanh ghi nào cả. 2.1. Mô tả kiến trúc Kết nối dãy khối số đ−ợc chỉ ra trong Hình 5-3. ADI không thể cấu hình đ−ợc, bởi vậy thông tin trong ch−ơng này chỉ giúp cho ng−ời đọc hiểu về cấu trúc của nó mà thôi. Hình 5-3: Cấu trúc dãy các khối PSoC số Những thành viên khác nhau trong họ PSoC sẽ có sự biến đổi số l−ợng các khối PSoC trong một dãy. Những khối này đ−ợc sắp xếp theo các hàng và ADI cung cấp một kiến trúc liên kết chung giữa liên kết số toàn cục (GDI) và liên kết khối số theo hàng (RDI). Không cần biết số l−ợng hàng có trong một chíp, điều quan trọng là các hàng PSoC đ−ợc liên kết với vào ra toàn cục theo một cách giống nhau. Sự liên kết này tạo ra một vị trí duy nhất của hàng và đ−ợc giải thích nh− sau: a. Địa chỉ thanh ghi: Các hàng và khối trong chíp cần phải có một địa chỉ thanh ghi duy nhất. b. Mức −u tiên ngắt: Mỗi một khối PSoC có một vector ngắt và một mức −u tiên ngắt. Vị trí của hàng trong dãy quyết định độ −u tiên của các khối PSoC trong một hàng. Hàng đ−ợc đánh số càng thấp thì độ −u tiên ngắt càng cao và địa chỉ vector ngắt càng thấp. 84 Tài liệu về PSoC – Bản quyền thuộc Nguyễn Xuân Sơn – ĐKTĐ1 – K44 – ĐHBKHN c. Truyền tin phổ biến: Mỗi một hàng PSoC số có một mạng truyền tin ở bên trong và có thể đ−ợc sử dụng độc lập ở bên trong bởi một trong bởi bốn khối PSoC số. Hoặc có thể đ−ợc sử dụng ở bên ngoài, trong tr−ờng hợp có nơi cần sử dụng mạng truyền tin từ bên ngoài, nguồn truyền tin có thể là một trong những hàng khác trong dãy. Bởi vậy, tùy thuộc vào vị trí của hàng trong dãy, sẽ có sự lựa chọn khác nhau cho việc sử dụng mạng truyền tin phổ biến. d. Vị trí trong dãy: Khối đầu tiên trong hàng đầu tiên và khối cuối cùng trong hàng cuối cùng không đ−ợc nối với nhau, bởi vậy, dãy các khối số không có dạng nh− là một đ−ờng vòng. Khối đầu tiên trong dãy có đầu vào từ khối tr−ớc đ−ợc hạ xuống mức thấp. Nếu có hàng thứ hai trong dãy thì đầu ra tới khối tiếp theo sẽ đ−ợc nối với khối tiếp theo. Khối cuối cùng của hàng cuối cùng có đầu ra tới khối tiếp theo đ−ợc hạ xuống mức thấp. 85 Tài liệu PSoC – biên dịch từ Datasheet bởi Nguyễn Xuân Sơn ĐKTĐ1 – K44 - ĐHBKHN 3. Kết nối các khối số theo hàng (Row Digital Interconnect – RDI) Mục này chỉ nói về một hàng khối PSoC số. Nó không nói về chức năng, đầu vào hay đầu ra cho những khối PSoC riêng biệt. Bảng 5-6: Thanh ghi hàng PSoC số Address Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Access x,xxh RDI0RI RI3[1:0] RI2[1:0] RI1[1:0] RI0[1:0] RW : 00 x,xxh RDI0SYN RI3SYN RI2SYN RI1SYN RI0SYN RW : 00 x,xxh RDI0IS BCSEL[1:0] IS3 IS2 IS1 IS0 RW : 00 x,xxh RDI0LT0 LUT1[3:0] LUT0[3:0] RW : 00 x,xxh RDI0LT1 LUT3[3:0] LUT2[3:0] RW : 00 x,xxh RDI0RO0 GOO5EN GOO1EN GOE5EN GOE1EN GOO4EN GOO0EN GOE4EN GOE0EN RW : 00 x,xxh RDI0RO1 GOO7EN GOO3EN GOE7EN GOE3EN GOO6EN GOO2EN GOE6EN GOE2EN RW : 00 Chỉ dẫn: Ký tự ‘x’ tr−ớc dấu phẩy trong tr−ờng địa chỉ cho biết rằng thanh ghi này có ở cả hai dãy thanh ghi Ký tự ‘xx’ sau dấu phẩy trong tr−ờng địa chỉ cho biết rằng có nhiều thanh ghi nh− vậy. Có rất nhiều tín hiệu ghé qua hàng PSoC số trên đ−ờng đi của nó hoặc từ những khối PSoC riêng biệt. Tuy nhiên, có một số l−ợng nhỏ các tín hiệu ghé qua mạch cấu hình đ−ợc trên đ−ờng đi của nó tới và từ các khối PSoC số. Mạch cấu hình đ−ợc cho phép kết nối mềm dẻo hơn giữa khối số và bus toàn cục. 3.1. Mô tả kiến trúc Trong Hình 5-4, bên trong một hàng khối PSoC số, có bốn khối PSoC. Hai khối đầu là loại Cơ bản (DBB). Hai khối sau là loại truyền thông (DCB). Hình vẽ mô tả kết nối giữa các khối PSoC trong một hàng. Hình 5-4: Chi tiết về nhóm bốn khối số PSoC Trong Hình 5-5, chi tiết về nhóm bốn khối PSoC đ−ợc thay bằng một hộp ở tâm của hình vẽ với tên gọi “4 PSoC Block Grouping” 86 Tài liệu về PSoC – Bản quyền thuộc Nguyễn Xuân Sơn – ĐKTĐ1 – K44 – ĐHBKHN Hình 5-5: Cấu trúc một hàng khối PSoC số 3.2. Các thanh ghi đ−ợc định nghĩa Hai đầu vào duy nhất tới hàng khối PSoC số có thể cấu hình đ−ợc là hai đ−ờng bus 8 bit đầu vào toàn cục Global Input Even và Global Input Odd. Hai đầu ra duy nhất có thể cấu hình đ−ợc của hàng khối PSoC số là hai đ−ờng bus 8 bit đầu ra toàn cục Global Output Even và Global Output Odd. Hình 5-5 minh họa mối liên hệ giữa tín hiệu toàn cục và tín hiệu của hàng. Chú ý phía bên trái của Hình 5-5 là đầu vào toàn cục (GIE[n] và GIO[n]) là những đầu vào tới bộ chọn đa thành phần vào 4 ra 1. Đầu ra của những bộ chọn này lại là đầu vào của hàng (RI[x]). Do có bốn bộ chọn vào 4 ra 1 nên mỗi bộ có một số đầu vào nhất định nên một hàng có thể truy nhập đến tất cả các đ−ờng đầu vào toàn cục trong chíp PSoC. 3.2.1. Thanh ghi RDIxRI. Những bit lựa chọn dùng để điều khiển bốn bộ chọn đ−ợc đặt trong thanh ghi RDIxRI, ký tự ‘x’ biểu thị cho chỉ số hàng t−ơng ứng. Bảng 5-7 liệt kê ý nghĩa của bốn thiết lập có thể cho mỗi bộ chọn đa thành phần. Bảng 5-7: Thanh ghi RDIxRI RI0[1:0] 0h: GIE[0] 1h: GIE[4] 2h: GIO[0] 3h: GIO[4] 0h: GIE[1] 87 Tài liệu PSoC – biên dịch từ Datasheet bởi Nguyễn Xuân Sơn ĐKTĐ1 – K44 - ĐHBKHN RI1[1:0] 1h: GIE[5] 2h: GIO[1] 3h: GIO[5] RI2[1:0] 0h: GIE[2] 1h: GIE[6] 2h: GIO[2] 3h: GIO[6] RI3[1:0] 0h: GIE[3] 1h: GIE[7] 2h: GIO[3] 3h: GIO[7] 3.2.2. Thanh ghi RDIxSYN Mặc định mỗi đầu vào của hàng đều đ−ợc đồng bộ với xung nhịp hệ thống. Tuy nhiên, ng−ời sử dụng có thể lựa chọn để vô hiệu hóa sự đồng bộ hóa này bằng cách thiết lập bit thích hợp trong thanh ghi RDIxSYN. Bảng 5-8: Thanh ghi RDIxSYN RI3SYN 0: Đầu vào của hàng thứ 3 đ−ợc đồng bộ hóa với xung nhịp hệ thống 24MHz 1: Đầu vào của hàng thứ 3 không đồng bộ hóa với xung nhịp của hệ thống RI2SYN 0: Đầu vào của hàng thứ 2 đ−ợc đồng bộ hóa với xung nhịp hệ thống 24MHz 1: Đầu vào của hàng thứ 2 không đồng bộ hóa với xung nhịp của hệ thống RI1SYN 0: Đầu vào của hàng thứ 1 đ−ợc đồng bộ hóa với xung nhịp hệ thống 24MHz 1: Đầu vào của hàng thứ 1 không đồng bộ hóa với xung nhịp của hệ thống RI0SYN 0: Đầu vào của hàng thứ 0 đ−ợc đồng bộ hóa với xung nhịp hệ thống 24MHz 1: Đầu vào của hàng thứ 0 không đồng bộ hóa với xung nhịp của hệ thống Thanh ghi RDIxRI và RDIxSYN là hai thanh ghi duy nhất tác động đến tín hiệu đầu vào của hàng khối PSoC số. Tất cả các thanh ghi khác đều liên quan tới cấu hình tín hiệu đầu ra. 3.2.3. Thanh ghi RDIxIS Nh− đã đ−ợc đề cập, mỗi một bảng tra cứu (Lookup table - LUT) có hai đầu vào, một đầu vào có thể cấu hình đ−ợc (đầu vào A) còn một đầu vào cố định với đầu ra của hàng. Đầu vào có thể cấu hình đ−ợc của LUT chọn giữa một đầu ra đơn và một đầu vào đơn. Bảng 5-9 liệt kê lựa chọn cho mỗi LUT trong một hàng. Những bit này đ−ợc đặt tên là IS (Input Select). Đầu vào cố định của LUT luôn luôn là RO[số của LUT + 1]. Ví dụ, đầu vào cố định của LUT0 là RO[1], đầu vào cố định của LUT1 là RO[2]… và LUT 3 là RO[0]. Bảng 5-9: Thanh ghi RDIxIS BCSEL[1:0] 0: Hàng 0 điều khiển mạng truyền tin nội bộ 1: Hàng 1 điều khiển mạng truyền tin nội bộ 2: Hàng 2 điều khiển mạng truyền tin nội bộ 3: Hàng 3 điều khiển mạng truyền tin nội bộ IS3 0: Đầu vào 3 của LUT 3 là RO[3] 1: Đầu vào 3 của LUT 3 là RI[3] IS2 0: Đầu vào 2 của LUT 2 là RO[2] 1: Đầu vào 2 của LUT 2 là RI[2] IS1 0: Đầu vào 1 của LUT 1 là RO[1] 1: Đầu vào 1 của LUT 1 là RI[1] IS0 0: Đầu vào 0 của LUT 0 là RO[0] 1: Đầu vào 0 của LUT 0 là RI[0] • Khi giá trị của BCSELL bằng với số hàng thì bộ đệm ba trạng thái sẽ điều khiển mạng truyền tin của hàng đ−ợc vô hiệu hóa từ đầu vào lựa chọn của bộ Mux và vì thế một khối trong hàng có thể mạng truyền tin nội bộ. 88 Tài liệu về PSoC – Bản quyền thuộc Nguyễn Xuân Sơn – ĐKTĐ1 – K44 – ĐHBKHN 3.2.4. Thanh ghi RDIxLTx Đầu ra từ hàng PSoC số là một bit phức tạp hơn đầu vào. Hình 5-5 miêu tả đầu ra của hàng PSoC số. Chú ý trong hình vẽ thì khối đ−ợc đặt tên là ‘Lx’. Khối này đại diện cho một bảng tra cứu 2 đầu vào (LUT). LUT cho phép ng−ời sử dụng định rõ một trong số 16 hàm logic có thể áp dụng với hai đầu vào. Đầu ra của hàm logic sẽ quyết định giá trị sẽ đ−ợc đ−a tới bus đầu ra toàn cục Global Output Even và Global Output Odd. Bảng 5-10 miêu tả mối quan hệ giữa bốn bit cấu hình của bảng tra cứu và kết quả của hàm logic. Một số ng−ời sử dụng nhận ra rằng rất dễ để quyết định thiết lập bit thích hợp bằng cách nhớ các bit cấu hình đại diện theo cột đầu ra trong một bảng chân lý gồm 2 đầu vào. Bảng 5-10 liệt kê bảy giá trị minh họa cho mối liên hệ giữa cột đầu ra của bảng chân lý với bit cấu hình đầu vào. Bảng 5-10: Ví dụ về bảng chân lý LUT A B AND OR A+ B A& B A B True 0 0 0 0 1 0 0 0 1 0 1 0 1 0 0 0 1 1 1 0 0 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 LUT[3:0] 1h 7h Bh 2h 3h 5h Fh Bảng 5-11: Thanh ghi RDIxLTx LUTx[3:0] 0h: 0000: FALSE 1h: 0001: A .AND. B 2h: 0010: A .AND. B 3h: 0011: A 4h: 0100: A .AND B 5h: 0101: B 6h: 0110: A .XOR. B 7h: 0111: A .OR. B 8h: 1000: A .NOR. B 9h: 1001: A .XNOR. B Ah: 1010: B Bh: 1011: A .OR. B Ch: 1100: A Dh: 1101: A .OR. B Eh: 1110: A .NAND. B Fh: 1111: TRUE 3.2.5. Thanh ghi RDIxROx. Những bit cấu hình cuối cùng cho đầu ra từ dãy các khối PSoC số đ−ợc cho trong hai thanh ghi RDIxROx. Hai thanh ghi này l−u giữ 16 bit và có thể độc lập cho phép bộ đệm ba trạng thái kết nối với tất cả 8 đ−ờng ra chẵn và 8 đ−ờng ra lẻ. Điều này có nghĩa là bất cứ hàng nào đều có thể kết nối với đầu ra toàn cục. L−u ý rằng bộ kích thích ba trạng thái đ−ợc dùng để kích thích đ−ờng ra toàn cục. Bởi vậy, đối với chíp có hơn một hàng khối PSoC số để có nhiều bộ kích thích trên một đ−ờng ra toàn cục thì trách nhiệm của ng−ời sử dụng là phải khẳng định rằng chíp ch−a đ−ợc cấu hình với nhiều bộ kích thích trên bất cứ một đầu ra toàn cục nào. 89 Tài liệu PSoC – biên dịch từ Datasheet bởi Nguyễn Xuân Sơn ĐKTĐ1 – K44 - ĐHBKHN 4. Các khối PSoC số (Digital Blocks) Bảng 5-12: Thanh ghi của khối PSoC số Address Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Access Thanh ghi điều khiển và dữ liệu 0,xxh DBB00DR0 Data[7:0] # : 00 0,xxh DBB00DR1 Data[7:0] W : 00 0,xxh DBB00DR2 Data[7:0] # : 00 0,xxh DBB00CR0 Function Control/Status bit for selected function[6:0] Enable # : 00 Thanh ghi mặt nạ che ngắt 0,E1h INT_MSK1 DCB13 DCB12 DBB11 DBB10 DCB03 DCB02 DBB01 DBB00 RW : 00 Thanh ghi cấu hình 1,xxh DBB00FN Data Invert BCEN End/Single Mode[1:0] Function[2:0] RW : 00 1,xxh DBB00IN Data Input[3:0] Clock Input[3:0] RW : 00 1,xxh DBB00OU AUXCLK AUXEN AUX IO Select[1:0] OUTEN Output Select[1:0] RW : 00 Chỉ dẫn: ‘#’ truy nhập bit theo một cách riêng ‘xx’ ký tự đi sau dấu phẩy trong tr−ờng địa chỉ cho biết rằng có nhiều thanh ghi nh− vậy Tất cả các khối PSoC số đều có thể đ−ợc cấu hình để thực hiện bất cứ một chức năng nào trong 5 chức năng cơ bản sau: bộ định thời, bộ đếm, bộ điều chế độ rộng xung, PRS, kiểm tra chu kỳ thừa (CRC). Những chức năng này đ−ợc sử dụng bằng cách cấu hình một khối PSoC độc lập hay một chuỗi vài khối PSoC liền nhau để thực hiện chức năng lớn hơn 8 bit. Các khối PSoC số truyền thông có thêm hai chức năng nữa đó là: SPI chủ, SPI tớ hay truyền thông không đồng bộ hai chiều. Mỗi một chức năng của khối PSoC số đều độc lập với các khối chức năng khác. Có tới 7 thanh ghi đ−ợc sử dụng để quyết định chức năng và trạng thái của khối PSoC. Những thanh ghi này đ−ợc đ−a ra trong Bảng 5-12. Các thanh ghi chức năng của khối số luôn luôn kết thúc với chữ FN, tên của những thanh ghi đầu vào luôn luôn kết thúc với chữ IN và cuối cùng tên của thanh ghi đầu ra luôn luôn kết thúc với chữ OU. Mỗi khối PSoC có ba thanh ghi (DR0, DR1, DR2) và một thanh ghi điều khiển (CR0). ý nghĩa của những bit trong thanh ghi này phụ thuộc nhiều vào chức năng mà nó đảm nhiệm. Ngoài 7 thanh ghi điều khiển chức năng và trạng thái của khối PSoC số còn có thêm một bit che ngắt cho mỗi một khối số. Mỗi một khối PSoC có duy nhất một vector ngắt và vì vậy có thể tạo cho nó một trình phục vụ ngắt. 4.1. Mô tả cấu trúc ở mức cao nhất, những thành phần chính của khối PSoC số là đ−ờng dữ liệu, bộ chọn đầu vào, bộ chia đầu ra, bus ba trạng thái PRSCRC, giao diện bus hệ thống, các thanh ghi cấu hình, và dải tín hiệu. 4.1.1. Bộ chọn đầu vào Nhìn chung, mỗi một chức năng đều có một đầu vào xung nhịp và một đầu vào dữ liệu có thể đ−ợc lựa chọn từ nhiều nguồn khác nhau. Mỗi một đầu vào đ−ợc lựa chọn với một bộ chọn vào 16 ra 1. Hơn nữa, có một bộ chọn vào 4 ra 1 cung cấp một đầu vào phụ cho chức năng SPI Slave, chức năng yêu cầu 3 đầu vào: Xung nhịp, dữ liệu, và SS_ (trừ khi là SS_ đ−ợc bắt ép hoạt động cùng với bit cho phép vào ra phụ). Đầu vào bộ chọn này dự định đ−ợc lựa chọn từ đầu vào GPIO. 4.1.2. Đồng bộ hóa lại xung nhịp đầu vào. Những khối PSoC số cho phép lựa chọn xung nhịp từ 1 trong 16 nguồn. Nguồn có thể là xung nhịp hệ thống (VC1, VC2, VC3, SYSCLK và SYSCLKX2), các chân đầu vào, đầu ra từ các khối PSoC khác. Để quản lý đ−ợc độ lệch xung và đảm bảo rằng giao diện giữa các khối đ−ợc tính toán thời gian phù hợp trong tất cả các tr−ờng hợp, tất cả 90 Tài liệu về PSoC – Bản quyền thuộc Nguyễn Xuân Sơn – ĐKTĐ1 – K44 – ĐHBKHN các đầu vào xung nhịp của khối số cần phải đ−ợc đồng bộ hóa lại với xung nhịp hệ thống SYSCLK hoặc SYSCLKX2. Xung nhịp SYSCLK hoặc SYSCLKX2 cũng có thể đ−ợc sử dụng trực tiếp. Bit AUXCLK trong thanh ghi DxBxxOU đ−ợc sử dụng để chỉ rõ đầu vào đồng bộ. Việc đồng bộ hóa đầu vào đ−ợc thực hiện theo các luật sau: a. Nếu xung nhịp đầu vào bắt nguồn từ SYSCLK (có thể đã đ−ợc chia nhỏ) thì sẽ đ−ợc khối PSoC số đồng bộ hóa lại với xung nhịp SYSCKL. Hầu hết các xung nhịp trong chíp bắt đều thuộc loại này. Ví dụ, VC1, VC2… b. Nếu xung nhịp đầu vào bắt nguồn từ SYSCLKX2, thì nó sẽ đ−ợc đồng bộ hóa với xung nhịp SYSCLKX2 c. Chọn trực tiếp từ xung nhịp SYSCLK d. Chọn trực tiếp từ xung nhịp SYSCLKX2 e. Đồng bộ hóa Bypass. Rất it khi lựa chọn điều này, bởi vì nếu xung nhịp không đ−ợc đồng bộ thì chúng có thể bắt đầu sai với lệnh đọc và ghi của CPU. Tuy nhiên, nó có thể xảy ra với tr−ờng hợp một chân ngoài phát xung nhịp cho khối số ở trạng thái không đồng bộ. Ví dụ, nếu ng−ời sử dụng muốn đồng bộ tác động của CPU bằng ngắt hay bằng một kỹ thuật nào khác. Những l−u ý sau đây liệt kê những cấu hình không đ−ợc cho phép, mặc dù phần cứng không hề ngăn cấm chúng. Bảng tóm tắt của những l−u ý này là bộ chia xung nhịp không đ−ợc cấu hình nh− là một cách để tạo xung nhịp đầu ra bằng với SYSCLK hay SYSCLKX2. 1. Khi VC1 đ−ợc cấu hình là chia bởi 1 thì lựa chọn xung nhịp VC1 là không cho phép. Việc cấu hình này tạo ra một xung nhịp bằng với xung nhịp hệ thống SYSCLK. Bởi vậy, SYSCLK nên đ−ợc dùng trực tiếp bằng cách đặt các bit AUXCLK trong thanh ghi DxBxxOU lên 11b. 2. Khi cả VC1 và VC2 đều đ−ợc cấu hình chia bởi 1 thì cũng t−ơng tự việc chọn xung nhịp VC2 là không cho phép. Bởi vậy, sử dụng xung nhịp trực tiếp nh− trên. 3. Khi VC3 đ−ợc cấu hình sao cho đầu ra có tần

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

  • pdfUnlock-Tai_lieu_ve_PSoC.pdf
Tài liệu liên quan