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 ...
62 trang |
Chia sẻ: hunglv | Lượt xem: 1222 | Lượt tải: 0
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:
- Unlock-Tai_lieu_ve_PSoC.pdf