Tải bản đầy đủ (.pdf) (62 trang)

Tài liệu về PSoC

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.67 MB, 62 trang )

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 P
rogrammable 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 độ -40
0
C đến 85
0
C.
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 I
2

C Master và I
2
C 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í (PSoC
TM
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 để lu 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 để lu 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) lu 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 (cha đợ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 System
1
System
1
System
1
System
1
System
1
System

1
System
1
System
1
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 lu 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.
System
1
: 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 System
1
System
1
System
1
System
1
System
1
System
1
System

1
System
1
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 lu 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 System
1
System
1
System
1
System
1
System
1
System
1
System
1
System
1
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 lu 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
để lu 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 lu giữ trong toán
hạng 1 của lệnh, kết quả đợc lu 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 lu
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 lu 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 lu 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à lu 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 lu 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)
Nhng lệnh thuộc chế độ địa chỉ này có địa chỉ đích đợc lu 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 lu 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 lu 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 lu giữ trong toán
hạng 1 của lệnh. Giá trị của nguồn đợc lu 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 lu 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 lu 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 lu

giữ trong toán hạng 1 của lệnh còn địa chỉ của nguồn đợc lu 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 lu 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 lu 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, nhng 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:
- Lu 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. Lu ý 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 lu ý 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, nhng 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.
Nhng để 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ẽ lu 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. Nhng 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 nhng 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). Lu ý 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.
Lu ý 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. Lu ý 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 nhng 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.
Lu ý 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 lu 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, nhng 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). Lu ý 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.
Lu ý:

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 (lu ý:
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 bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×