1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Tài liệu về PSoC

62 315 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 62
Dung lượng 1,67 MB

Nội dung

• 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

Trang 1

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

Trang 2

Hình 3-1 : Sơ đồ khối cấu trúc của PSoC (CY8C27000)

Trang 3

ĩ 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

Trang 4

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

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

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)

POR 0 0 0 0 0 0 1 0

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

Trang 5

1.2.2 Thanh ghi chứa

Bảng 4-3: Thanh ghi chứa (CPU_A)

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 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

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)

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 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)

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 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/

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

Trang 6

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.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

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

Trang 7

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

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

Vídụ:

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

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ố

55

Trang 8

Instruction Source Index

Ví dụ:

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

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

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

Trang 9

Ví dụ:

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

Ví dụ:

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

Ví dụ:

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

Instruction Source Address Pointer

Ví dụ:

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

Trang 10

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

Instruction Destination Address Pointer

Ví dụ:

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

Trang 11

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,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

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

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

Trang 12

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

Trang 13

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ó

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

Trang 14

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

Trang 15

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

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

Trang 16

• 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:

Trang 17

- 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

Trang 18

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

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

Trang 19

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

Trang 20

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

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

Trang 21

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

Đầ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

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

Trang 22

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

* 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

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

Trang 23

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

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

Trang 24

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

1,E0h OSC_CR0 32k Select PLL Mode No Buzz Sleep[1:0] CPU Speed [2:0] RW:00

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

Trang 25

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

Trang 26

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ị

đó 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ế độ

Trang 27

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:

(chuẩn bị cho chế độ nghỉ, có thể có nhiều lệnh)

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

Trang 28

Hình 4-6: Biều đồ dãy các sự kiện đánh thức hệ thống

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

Trang 29

- 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

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

Trang 30

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ỉ

Trang 31

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,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,BDh RDI1RO0 GOO5EN GOO1EN GOE5EN GOE1EN GOO4EN GOO0EN GOE4EN GOE0EN RW : 00

79

Ngày đăng: 24/04/2014, 19:16

HÌNH ẢNH LIÊN QUAN

Hình 3-1 : Sơ đồ khối cấu trúc của PSoC (CY8C27000) - Tài liệu về PSoC
Hình 3 1 : Sơ đồ khối cấu trúc của PSoC (CY8C27000) (Trang 2)
Hình 4-1 : Cấu trúc liên kết của CPU với bộ nhớ (cấu trúc Harvard) - Tài liệu về PSoC
Hình 4 1 : Cấu trúc liên kết của CPU với bộ nhớ (cấu trúc Harvard) (Trang 6)
Bảng 4-21  : Bảng vector ngắt của CY8C27xxx - Tài liệu về PSoC
Bảng 4 21 : Bảng vector ngắt của CY8C27xxx (Trang 11)
Hình 4-2: Sơ đồ khối của bộ điều khiển ngắt - Tài liệu về PSoC
Hình 4 2: Sơ đồ khối của bộ điều khiển ngắt (Trang 12)
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 - Tài liệu về PSoC
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 (Trang 17)
Hình 4 - 4: Sơ đồ khối chế độ ngắt của GPIO - Tài liệu về PSoC
Hình 4 4: Sơ đồ khối chế độ ngắt của GPIO (Trang 18)
Bảng 4-23: Địa chỉ bit của thanh ghi bên trong - Tài liệu về PSoC
Bảng 4 23: Địa chỉ bit của thanh ghi bên trong (Trang 18)
Bảng 4 - 24: Các chế độ điều khiển chân ra của chíp - Tài liệu về PSoC
Bảng 4 24: Các chế độ điều khiển chân ra của chíp (Trang 19)
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 - Tài liệu về PSoC
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 (Trang 28)
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 - Tài liệu về PSoC
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 (Trang 31)
Hình 5-2: Sơ đồ cấu trúc liên kết vào ra số - Tài liệu về PSoC
Hình 5 2: Sơ đồ cấu trúc liên kết vào ra số (Trang 34)
Hình 5-3: Cấu trúc dãy các khối PSoC số - Tài liệu về PSoC
Hình 5 3: Cấu trúc dãy các khối PSoC số (Trang 36)
Hình 5-5: Cấu trúc một hàng khối PSoC số - Tài liệu về PSoC
Hình 5 5: Cấu trúc một hàng khối PSoC số (Trang 39)
Bảng 5-8: Thanh ghi RDIxSYN - Tài liệu về PSoC
Bảng 5 8: Thanh ghi RDIxSYN (Trang 40)
Bảng 5-10: Ví dụ về bảng chân lý LUT - Tài liệu về PSoC
Bảng 5 10: Ví dụ về bảng chân lý LUT (Trang 41)
Hình 5-6: Tái đồng bộ xung nhịp đầu vào - Tài liệu về PSoC
Hình 5 6: Tái đồng bộ xung nhịp đầu vào (Trang 43)
Hình 5-7: Sơ đồ khối mô tả mức cao nhất của các khối PSoC số. - Tài liệu về PSoC
Hình 5 7: Sơ đồ khối mô tả mức cao nhất của các khối PSoC số (Trang 44)
Hình 5-10: Sơ đồ nguyên lý của bộ điều chế độ rộng xung - Tài liệu về PSoC
Hình 5 10: Sơ đồ nguyên lý của bộ điều chế độ rộng xung (Trang 46)
Hình 5-9: Sơ đồ nguyên lý của bộ đếm - Tài liệu về PSoC
Hình 5 9: Sơ đồ nguyên lý của bộ đếm (Trang 46)
Hình 5-13: Sơ đồ nguyên lý của bộ truyền quang học - Tài liệu về PSoC
Hình 5 13: Sơ đồ nguyên lý của bộ truyền quang học (Trang 48)
Hình 5-15: Sơ đồ nguyên lý của bộ truyền thông SPI Master - Tài liệu về PSoC
Hình 5 15: Sơ đồ nguyên lý của bộ truyền thông SPI Master (Trang 49)
Hình 6-1: Sơ đồ khối của hệ thống tương tự trong PSoC - Tài liệu về PSoC
Hình 6 1: Sơ đồ khối của hệ thống tương tự trong PSoC (Trang 50)
Hình 6-2: Sơ đồ giao diện của một cột khối tương tự  1.1.1. Giao diện Bus dữ liệu t−ơng tự - Tài liệu về PSoC
Hình 6 2: Sơ đồ giao diện của một cột khối tương tự 1.1.1. Giao diện Bus dữ liệu t−ơng tự (Trang 51)
Hình 6-3: Sơ đồ khối vào ra tương tự với chân ngoài - Tài liệu về PSoC
Hình 6 3: Sơ đồ khối vào ra tương tự với chân ngoài (Trang 52)
Hình 6-7: Sơ đồ nguyên lý bộ khuếch đại không đảo PGA - Tài liệu về PSoC
Hình 6 7: Sơ đồ nguyên lý bộ khuếch đại không đảo PGA (Trang 55)
Hình 6-13: Sơ đồ nguyên lý của bộ chuyển đổi DAC - Tài liệu về PSoC
Hình 6 13: Sơ đồ nguyên lý của bộ chuyển đổi DAC (Trang 58)
Hình 6-14: Sơ đồ nguyên lý của bộ lọc thông thấp - Tài liệu về PSoC
Hình 6 14: Sơ đồ nguyên lý của bộ lọc thông thấp (Trang 58)
Hình 6-16: Sơ đồ nguyên lý của bộ SC Block - Tài liệu về PSoC
Hình 6 16: Sơ đồ nguyên lý của bộ SC Block (Trang 59)
Hình 6-18: Sơ đồ nguyên lý của bộ chọn điện áp tham chiếu - Tài liệu về PSoC
Hình 6 18: Sơ đồ nguyên lý của bộ chọn điện áp tham chiếu (Trang 60)
Hình 6-19: Sơ đồ nguyên lý bộ DTMFDiler - Tài liệu về PSoC
Hình 6 19: Sơ đồ nguyên lý bộ DTMFDiler (Trang 60)

TỪ KHÓA LIÊN QUAN

w