Tại thời điểm khởi động chíp, WDT khởi đầu là bị đóng. Bit PORS trong thanh
ghi điềukhiể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ặcsự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ởivi
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ànbộ 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
62 trang |
Chia sẻ: maiphuongdc | Lượt xem: 1881 | Lượt tải: 2
Bạn đang xem trước 20 trang tài liệu Tài liệu về Thiết bị PSoC, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
o động thạch anh bên ngoài thì bit 7 của thanh ghi điều khiển bộ dao
động OSC_CR0 cần phải đ−ợc đặt = 1 (mặc định là 0). Thành phần bên ngoài chỉ là
một thạch anh và 2 tụ nhỏ nối với Vcc. (xem hình vẽ). Chuyển đổi giữa bộ dao động
ngoài và bộ dao động trong có thể làm cho bus hệ thống không đồng bộ.
Trong tiến trình kích hoạt bộ ECO, nó cần một khoảng thời gian tách rời tr−ớc
khi đ−ợc sử dụng nh− là một nguồn xung nhịp 32 kHz. Khoảng thời gian tách rời này
đ−ợc bổ xung vào phần cứng bằng Sleep Timer. Vi ch−ơng trình (Firmware - phần
mềm đ−ợc nạp cố định trong chíp) cần phải đ−ợc thiết lập thời gian nghỉ khoảng 1 giây
(khoảng thời gian lớn nhất của ECO), và sau đó cho phép ECO bằng thanh ghi
70
Tài liệu về PSoC – Bản quyền thuộc Nguyễn Xuân Sơn – ĐKTĐ1 – K44 – ĐHBKHN
OSC_CR0. Tại thời gian nghỉ 1 giây (ngắt của Sleep Timer), chuyển mạch sang ECO
đ−ợc tạo ra bởi phần cứng. Nếu sau đó ECO không hoạt động thì ILO sẽ đ−ợc kích
hoạt lại và chuyển mạch sẽ chuyển lại với ILO ngay lập tức.
Các b−ớc của vi ch−ơng trình cần phải thực hiện trong việc chuyển đổi giữa bộ phát
xung nhịp chậm nội tại sang bộ phát xung nhịp thạch anh 32kHz nh− sau:
1. Tại thời điểm reset, chip bắt đầu hoạt động và nó sử dụng bộ phát xung nhịp
chậm nội tại.
2. Lựa chọn khoảng thời gian nghỉ 1 giây bằng bit[4:3] trong thanh ghi OSC_CRO
nh− là khoảng thời gian để ổn định bộ phát xung nhịp.
3. Cho phép bộ pháp xung nhịp thạch anh 32kHz bằng cách đặt bit 7 trong thanh
ghi OSC_CR0 lên 1.
4. Bộ phát xung nhịp thạch anh 32kHz trở thành nguồn xung nhịp đ−ợc lựa chọn
tại điểm kết thúc của một giây nghỉ nói trên. Khoảng thời gian nghỉ cho phép bộ
phát xung nhịp có thời gian để ổn định tr−ớc khi nó trở thành nguồn cung cấp
xung nhịp. Ngắt Sleep không đ−ợc mở trong khi việc chuyển đổi đang diễn ra.
Reset lại Sleep Timer để đảm bảo khoảng thời gian nghỉ cần thiết (nếu nh− nó
không giao tiếp với bất cứ một hệ thống thời gian thực nào). L−u ý rằng bộ phát
xung nhịp tốc độ thấp vẫn tiếp tục chạy cho đến khi chuyển hẳn sang bộ phát
xung nhịp ngoài nhờ vào ngắt của Sleep Timer.
5. Một lời khuyên là nên đợi hết một giây để bộ phát xung nhịp ổn định rồi mới
cho phép chế độ PLL chốt tần số bộ phát xung nhịp nội tại với tần số của bộ
phát xung nhịp thạch anh 32kHz.
L−u ý:
a. Bộ phát xung nhịp nội tại sẽ đ−ợc chuyển trở lại ngay lập tức bằng cách viết giá
trị 0 vào bit điều khiển [32k Select].
b. Nếu thiết lập thích hợp đ−ợc lựa chọn trong PSoC Designer thì những b−ớc trên
sẽ đ−ợc thực hiện tự động trong file boot.asm
c. Chuyển đổi phạm vi hai bộ phát xung nhịp có thể làm cho xung nhịp bus hệ
thống không đồng bộ. Những chức năng yêu cầu xung nhịp 32k nên mở sau khi
đã chuyển đổi xong.
4.4. Vòng chốt pha - Phase Locked Loop (PLL)
Bảng 4 - 30: Thanh ghi của Phase Locked Loop
Address Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Access
1,E0h OSC_CR0 32k Select PLL Mode No Buzz Sleep[1:0] CPU Speed [2:0] RW:00
1,E2h OSC_CR2 PLLGAIN EXTCLKEN IMODIS SYSCCKX2DIS RW:00
Chức năng PLL sẽ phát ra xung nhịp hệ thống với độ chính xác của thạch anh. Nó
đ−ợc thiết kế để cung cấp một bộ phát xung nhịp 23.986 MHz khi sử dụng với thạch
anh 32.768 kHz
Mặc dù PLL ăn theo độ chính xác của thạch anh. Nó vẫn yêu cầu thời gian để
chốt vào tần số chíp khi khởi động lần đầu. Độ dài của thời gian phụ thuộc vào
PLLGAIN đ−ợc điều khiển bởi bit 7 trong thanh OSC_CR2. Nếu bit này đ−ợc giữ ở
mức thấp thì thời gian chốt sẽ nhỏ hơn 10ms. Nếu bit này đ−ợc giữ ở mức cao thì thời
gian chốt sẽ lớn hơn 50ms. Sau khi việc chốt hoàn tất thì bit này đ−ợc khuyến cáo là
71
Tài liệu PSoC – biên dịch từ Datasheet bởi Nguyễn Xuân Sơn ĐKTĐ1 – K44 - ĐHBKHN
nên giữ ở mức cao để giảm sự bất ổn ở đầu ra. Nếu có thể v−ợt qua đ−ợc thời gian chốt
dài hơn thì bit PLLGAIN có thể đ−ợc giữ ở mức cao trong suốt thời gian còn lại.
Sau khi bộ phát xung nhịp thach anh bên ngoài đ−ợc lựa chọn và hoạt động thì
những thủ tục sau đây sẽ cho phép chế độ PLL và cho phép chốt tần số thích hợp
a. Chọn tần số CPU là 3 MHz hoặc nhỏ hơn
b. Mở chế độ PLL
c. Đợi 10 ms hay 50ms, phụ thuộc vào bit 7 trong thanh ghi OSC_CR2
d. Đặt tần số CPU lên cao hơn nếu muốn. Để làm việc này thì ta thay đổi
giá trị các bit CPU Speed trong thanh ghi OSC_CR0. Tần số của CPU sẽ
đ−ợc thay đổi ngay lập tức khi những bit này đ−ợc set.
Nếu những thiết lập thích hợp đ−ợc lựa chọn trong PSoC Designer thì những b−ớc
trên sẽ đ−ợc thực hiện tự động trong file boot.asm
4.5. Sleep and Watchdog
Bảng 4 - 31: Những thanh ghi của Sleep và Watchdog.
Address Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Access
0,E0h INT_MSK0 VC3 Sleep GPIO Analog3 Analog2 Analog1 Analog0 V Monitor RW:00
0,E3h RES_WDT WDSL_Clear[7:0] W:00
x,FEh CPU_SCR1 IRAMDIS RW:00
1,E0h OSC_CR0 32k Select PLL Mode No Buzz Sleep[1:0] CPU Speed [2:0] RW:00
1,E9h ILO_TR Bias Trim[1:0] Freq Trim[3:0] W:00
1,EBh ECO_TR PSSDC[1:0] W:00
x,FFh CPU_SCR0 GIES WDRS PORS Sleep STOP RW:XX
Chỉ dẫn:
X: Giá trị sau khi reset nguồn là không rõ
x, Ký tự ‘x’ đứng tr−ớc dấu phẩy trong tr−ờng địa chỉ chỉ rõ rằng thanh ghi này có thể đ−ợc
truy nhập mà không cần biết là dãy thanh ghi nào đang đ−ợc sử dụng
Mục đích của chế độ nghỉ là để giảm năng l−ợng tiêu thụ trung bình của hệ thống
đến mức có thể. Hệ thống đi vào chế độ nghỉ đ−ợc khởi tạo và điều khiển bởi vi ch−ơng
trình. Trong trạng thái này, CPU đ−ợc dừng lại ở một biên giới lệnh và bộ phát xung
nhịp 24/48 MHz, modun bộ nhớ Flash và điện áp tham chiếu band-gap giảm năng
l−ợng tiêu thụ. Khối PSoC duy nhất còn hoạt động là bộ phát xung nhịp 32 kHz (bên
ngoài hoặc bên trong). Khối PSoC bấm giờ từ sự lựa chọn xung nhịp 32kHz và mạch
theo dõi điện áp cung cấp.
Các khối PSoC t−ơng tự có hai chế độ giảm nguồn đ−ợc điều khiển bởi vi ch−ơng
trình và độc lập với trạng thái nghỉ. Khối continuous time analog có thể vẫn hoạt động,
từ khi chúng không yêu cầu nguồn xung nhịp. Tuy nhiên, khối analog SC sẽ không
hoạt động từ lúc nguồn xung nhịp nội tại cung cấp cho chúng ngừng hoạt động.
Hệ thống có thể chỉ đ−ợc đánh thức khỏi chế độ nghỉ bằng một yêu cầu ngắt hoặc
sự kiện reset hệ thống. Đồng hồ nghỉ cung cấp những ngắt định kỳ để cho phép hệ
thống thức dậy, thăm dò ngoại vi, thực hiện chức năng thời gian thực và sau đó lại đi
vào chế độ nghỉ lần nữa. Ngắt của chân GPIO, ngắt theo dõi nguồn, ngắt của cột khối
t−ơng tự, và nguồn xung nhịp ngoài hay xung nhịp 32k ở bên trong đ−ợc sử dụng làm
mẫu để đồng bộ hóa những ngắt có thể đ−ợc dùng để đánh thức hệ thống dậy.
Mạch định thời Watchdog đ−ợc thiết kế để sinh ra một ngắt cứng tới chíp sau một
khoảng thời gian đ−ợc lập trình tr−ớc, trừ khi nó đ−ợc phục vụ một cách định kỳ trong
vi ch−ơng trình. Chức năng này sẽ reset hệ thống nếu nh− CPU hoạt động sai. Nó cũng
có thể reset nếu nh− hệ thống bị treo.
72
Tài liệu về PSoC – Bản quyền thuộc Nguyễn Xuân Sơn – ĐKTĐ1 – K44 – ĐHBKHN
Một khi bộ định thời Watchdog đ−ợc mở thì nó chỉ có thể bị đóng từ một sự kiện
reset bên ngoài (XRES) hay một sự kiện reset nguồn (POR). Một reset của bộ định thời
Watchdog sẽ vẫn để watchdog hoạt động. Bởi vậy, nếu watchdog đ−ợc sử dụng trong
một ứng dụng thì tất cả các mã (bao gồm cả mã khởi đầu) cần phải đ−ợc viết nh− thể là
watchdog đang đ−ợc mở.
4.5.1. Mô tả cấu trúc
Những thành phần của chíp cần phải có khi hoạt động ở chế độ nghỉ và watchdog
là lựa chọn nguồn xung nhịp 32kHz (bên ngoài hoặc bên trong), với bộ định thời sleep,
bit sleep trong thanh ghi CPU_SCR0, mạch sleep, mạch làm t−ơi band gap (để làm t−ơi
điện áp tham chiếu một cách định kỳ), và bộ định thời watchdog.
4.5.1.1. Lựa chọn nguồn xung nhịp 32kHz
Mặc định nguồn xung nhịp 32kHz đ−ợc lấy từ bộ phát xung nhịp nội tại tốc độ
thấp (ILO). Có thể lựa chọn nguồn xung nhịp lấy từ bộ phát xung nhịp ngoài (ECO).
Việc lựa chọn này đ−ợc thực hiện bằng cách thay đổi giá trị bit 7 trong thanh ghi
OSC_CR0. Lựa chọn ECO là nguồn xung nhịp 32kHz sẽ cho phép bộ định thời sleep
và ngắt của nó dùng trong ứng dụng thời gian thực. Cho dù nguồn xung nhịp nào đ−ợc
lựa chọn thì nguồn xung nhịp 32kHz cũng giữ một vị trí then chốt trong chức năng
nghỉ. Nó chạy liên tục và th−ờng xuyên đánh thức hệ thống dậy, nó cũng định kỳ làm
t−ơi lại điện áp band gap trong suốt quá trình nghỉ.
4.5.1.2. Bộ định thời nghỉ
Bộ định thời nghỉ là một bộ đếm tiến 15 bit bằng nguồn xung nhịp 32kHz lựa
chọn, có thể là ILO hoặc ECO. Bộ định thời này luôn luôn đ−ợc hoạt động. Nếu một bộ
ICE hoạt động ở chế độ gỡ rối và bit Stop trong thanh ghi OSC_CR0 đ−ợc set thì bộ
định thời nghỉ sẽ bị vô hiệu hóa. Vì thế ng−ời sử dụng sẽ không có reset th−ờng xuyên
của watchdog khi một điểm ngắt đ−ợc tìm ra trong tr−ờng gỡ rối.
Nếu ngắt của bộ định thời nghỉ đ−ợc cho phép, một ngắt định kỳ tới CPU đ−ợc
sinh ra dựa trên khoảng thời gian nghỉ lựa chọn trong thanh ghi OSC_CR0. Về mặt
chức năng thì bộ định thời sleep không cần thiết phải trực tiếp kết hợp với trạng thái
nghỉ. Nó có thể đ−ợc dùng nh− là một ngắt của bộ định thời đa mục đích cho dù hệ
thống có đang ở trạng thái nghỉ hay không.
Trạng thái reset của bộ định thời sleep là một giá trị đếm đến 0. Có hai cách để
reset bộ định thời Sleep. Một là bất cứ reset phần cứng nào, ví dụ nh− reset nguồn
(POR), reset ngoài hay watchdog reset. Hai là reset bộ định thời Sleep bằng vi ch−ơng
trình. Lệnh viết giá trị 38h vào thanh ghi RES_WDT sẽ reset bộ định thời Sleep (l−u ý:
bất cứ lệnh ghi giá trị vào thanh ghi RES_WDT đều reset lại bộ định thời watchdog).
Xóa bộ định thời Sleep có thể đ−ợc làm bất cứ lúc nào để đồng bộ hóa hoạt động của
bộ định thời Sleep với xử lý của CPU. Một ví dụ hay của việc này là sau khi reset
nguồn (POR), ví dụ CPU đ−ợc giữ chậm để chờ điện áp tăng đủ, cũng rất quan trọng.
Hơn nữa, mt phần quan trọng của phần mở đầu ch−ơng trình có thể đ−ợc yêu cầu.
Trong khi đó thì bộ định thời Sleep sẽ bắt đầu đếm ngay sau khi POR và nó sẽ đếm đến
một giá trị nào đó tại thời điểm mã của ng−ời sử dụng đ−ợc thi hành. Trong tr−ờng hợp
này nên xóa bộ định thời Sleep tr−ớc khi cho phép ngắt khởi đầu của bộ định thời
Sleep. Để chắc chắn rằng khoảng nghỉ đầu tiên sẽ bằng khoảng thời gian đặt tr−ớc.
4.5.1.3. Bit Sleep
Chế độ nghỉ đ−ợc khởi đầu trong vi ch−ơng trình bằng cách thiết lập bit Sleep
trong thanh ghi điều khiển hệ thống (CPU_SCR0). Để đánh thức hệ thống thì bit này
73
Tài liệu PSoC – biên dịch từ Datasheet bởi Nguyễn Xuân Sơn ĐKTĐ1 – K44 - ĐHBKHN
cần phải đ−ợc xóa đồng thời với bất cứ một ngắt đ−ợc phép nào. Tuy nhiên, có hai tính
năng đặc biệt của bit này đảm bảo hoạt động của Sleep đúng cách. Thứ nhất, lệnh ghi
để đặt bit này lên 1 đ−ợc ngăn chặn, nếu một ngắt đảm nhiệm giới hạn lệnh đó. Thứ
hai, có một khóa liên động để đảm bảo rằng một khi nó đ−ợc set, bit sleep có thể
không bị xóa bởi một ngắt đến trừ khi là mạch nghỉ đã hoàn thành xong một chuỗi sự
kiện nghỉ và tín hiệu giảm năng l−ợng của hệ thống đ−ợc xác nhận. Điều này sẽ ngăn
chặn mạch sleep khỏi ngắt trong giữa tiến trình hệ thống đang ở trạng thái giảm năng
l−ợng và có lẽ sẽ để hệ thống ở một trạng thái không xác định.
4.5.2. L−u ý khi sử dụng chế độ nghỉ trong ứng dụng
Những phần sau đây sẽ nêu vài l−u ý về chế độ nghỉ và liên hệ của nó với vi
ch−ơng trình và phần mềm ứng dụng.
a. Nếu một ngắt đang chờ, đ−ợc cho phép và đ−ợc lập lịch để thi hành tại lệnh cuối
cùng sau khi viết vào bit sleep thì hệ thống sẽ không đi vào chế độ nghỉ. Lệnh sẽ
vẫn đ−ợc thi hành, nh−ng nó sẽ không thể set đ−ợc bit sleep trong thanh ghi
CPU_SCR0. Thay vào đó thì lệnh sẽ đ−ợc thi hành và tác động của lệnh nghỉ bị
bỏ qua.
b. Bit cho phép ngắt toàn cục không cần thiết phải đ−ợc mở để đánh thức hệ thống
khỏi trạng thái nghỉ. Các bit cho phép ngắt độc lập với nhau và có khả năng
đ−ợc thiết lập trong thanh ghi mặt nạ che ngắt. Nếu bit cho phép ngắt toàn cục
không đ−ợc set thì CPU sẽ không thực hiện trình phục vụ ngắt liên quan tới ngắt
đó. Tuy nhiên, hệ thống sẽ bị đánh thức và tiếp tục thi hành các lệnh tại thời
điểm mà nó đi vào trạng thái nghỉ. Trong tr−ờng hợp này thì ng−ời sử dụng phải
xóa ngắt chờ một cách thủ công, hoặc có thể mở bit cho phép ngắt toàn cục rồi
sau đó để cho CPU thi hành trình phục vụ ngắt. Nếu một ngắt chờ không đ−ợc
xóa thì nó sẽ vẫn tiếp tục xác nhận, và mặc dù bit sleep đ−ợc ghi và chuỗi sự
kiện nghỉ đ−ợc thi hành, ngay khi chíp đi vào chế độ nghỉ, bit sleep sẽ bị xóa
bởi ngắt chờ và hệ thống sẽ thoát khỏi chế độ nghỉ.
c. Khi thức dậy, lệnh nằm ngay sau lệnh nghỉ sẽ đ−ợc thi hành tr−ớc trình phục vụ
ngắt (nếu cho phép). Lệnh nằm ngay sau lệnh nghỉ đ−ợc dừng lại tr−ớc khi hệ
thống đi vào chế độ nghỉ. Bởi vậy, khi một ngắt xảy ra và đánh thức hệ thống
dậy thì lệnh ngay sau lệnh nghỉ sẽ đ−ợc thi hành và khi đó thì trình phục vụ ngắt
cũng đ−ợc thi hành. (Nếu bit cho phép ngắt toàn cục đ−ợc set, thực hiện lệnh sẽ
chỉ tiếp tục tại nơi mà nó bỏ dở tr−ớc khi đi vào chế độ nghỉ.)
d. Nếu chế độ PLL đ−ợc mở thì tần số của CPU cần phải đ−ợc giảm xuống 3MHz
tr−ớc khi đi vào chế độ nghỉ. Khuyến cáo là nên đợi 10ms sau khi hệ thống thức
dậy để đảm bảo tần số hoạt động bình th−ờng của CPU đ−ợc khôi phục.
e. Năng l−ợng của phần t−ơng tự cần phải đ−ợc tắt bằng vi ch−ơng trình tr−ớc khi
đi vào chế độ nghỉ. Chế độ nghỉ của hệ thống sẽ không điều khiển mảng t−ơng
tự. Có nhiều cách điều khiển nguồn năng l−ợng độc lập cho mỗi khối t−ơng tự
và nhiều cách điều khiển nguồn năng l−ợng chính trong khối tham chiếu. Cách
điều khiển nguồn năng l−ợng cần phải đ−ợc thực hiện bởi vi ch−ơng trình.
f. Nếu bit cho phép ngắt toàn cục bị đóng, nó chỉ có thể đ−ợc mở một cách an toàn
sau lệnh viết vào bit sleep. Nó th−ờng gây rắc rối khi có một ngắt ở lệnh cuối
cùng ngay tr−ớc lệnh ghi vào bit sleep. Điều này có nghĩa là tại thời điểm quay
về từ ngắt, lệnh nghỉ sẽ đ−ợc thi hành và có thể bỏ qua bất cứ một sự chuẩn bị
nào của vi ch−ơng trình cần thiết phải thực hiện theo trình tự để đi vào chế độ
nghỉ. Để ngăn chặn điều này thì cần phải cấm các ngắt tr−ớc khi đi vào chế độ
74
Tài liệu về PSoC – Bản quyền thuộc Nguyễn Xuân Sơn – ĐKTĐ1 – K44 – ĐHBKHN
nghỉ. Sau khi chuẩn bị cho chế độ nghỉ, cho phép ngắt toàn cục và viết vào bit
sleep với hai lệnh liên tiếp sau:
and f,~01h // vô hiệu hóa ngắt toàn cục
(chuẩn bị cho chế độ nghỉ, có thể có nhiều lệnh)
or f,01h // cho phép ngắt toàn cục
mov reg[ffh],08h // đ−a hệ thống vào chế độ nghỉ.
Do khoảng thời gian của lệnh cho phép ngắt toàn cục là rất nhỏ nên khó có
thể có một ngắt sẽ xảy ra ngay sau lệnh trên. Ngắt sớm nhất có thể xảy ra là sau
lệnh tiếp theo (là lệnh đ−a hệ thống vào chế độ nghỉ) đã đ−ợc thi hành. Bởi vậy,
nếu một ngắt đang chờ và lệnh nghỉ đ−ợc thi hành nh− đ−ợc mô tả trong mục (a)
thì lệnh nghỉ sẽ đ−ợc bỏ qua. Lệnh đầu tiên đ−ợc thi hành sau trình phục vụ ngắt
sẽ là lệnh nằm ngay sau lệnh nghỉ.
4.5.2.1. Đánh thức hệ thống.
Một khi hệ thống đã ở trạng thái nghỉ thì sự kiện duy nhất có thể đánh thức hệ
thống là một ngắt. Bit cho phép ngắt toàn cục trong thanh ghi CPU_F không cần thiết
phải đ−ợc set. Bất cứ một ngắt không bị che nào đều có thể đánh thức hệ thống dậy.
Một lựa chọn cho CPU là có thi hành ngắt đó hay không sau khi hệ thống bị đánh thức.
Dãy sự kiện đánh thức hệ thống đ−ợc đồng bộ với xung nhịp 32kHz với mục đích
tạo độ trễ khi khởi động lại, cho phép Module bộ nhớ Flash có đủ thời gian để khôi
phục lại mức năng l−ợng hoạt động tr−ớc khi CPU phát ra lệnh đọc đầu tiên. Một lý do
khác cho sự trễ đó là để cho phép IMO, Bandgap, mạch LVD /POR có thời gian ổn
định tr−ớc khi đi vào hoạt động. Dãy sự kiện đánh thức hệ thống đ−ợc chỉ ra trong
Hình 4-6 và đ−ợc mô tả nh− sau:
a. Khi một ngắt đánh thức xảy ra và đ−ợc đồng bộ hóa với s−ờn âm của xung nhịp
32kHz.
b. Tại s−ờn d−ơng tiếp theo của nguồn xung nhịp, tín hiệu giảm nguồn hệ thống
đ−ợc đảo lại. Module b nhớ Flash, IMO và mạch bandgap đ−ợc cấp năng l−ợng
ở trạng thái hoạt động bình th−ờng.
c. Tại s−ờn d−ơng tiếp theo của xung nhịp 32kHz, giá trị chính xác rõ ràng của
POR và LVD đã ổn định và đ−ợc lấy mẫu.
d. Tại s−ờn âm tiếp theo của xung nhịp 32kHz ( sau khoảng 15 us), tín hiệu BRQ
đ−ợc đảo lại nhờ mạch logic nghỉ. Trên s−ờn tiếp theo của CPUCKL, tín hiệu
BRA đ−ợc đảo lại bởi CPU và lệnh thi hành tiếp tục. Thời gian đánh thức hệ
thống là từ 75 đến 105 us.
75
Tài liệu PSoC – biên dịch từ Datasheet bởi Nguyễn Xuân Sơn ĐKTĐ1 – K44 - ĐHBKHN
Hình 4-6: Biều đồ dãy các sự kiện đánh thức hệ thống
4.5.2.2. Làm t−ơi bandgap
Trong suốt quá trình hoạt động bình th−ờng, mạch bandgap cung cấp cho hệ
thống một điện áp tham chiếu (VREF) để sử dụng cho các khối t−ơng tự, bộ nhớ Flash
và mạch phát hiện điện áp thấp (LVD). Bình th−ờng đầu ra của bandgap đ−ợc nối trực
tiếp đến tín hiệu VREF. Tuy nhiên, trong trạng thái ngủ thì khối sinh điện áp tham
chiếu và mạch phát hiện điện áp thấp hoàn toàn đ−ợc giảm năng l−ợng. Khối bandgap
và LVD đ−ợc mở lại định kỳ trong suốt quá trình nghỉ để theo dõi điện áp thấp.
Điều này đ−ợc thực hiện bằng cách bật bandgap một cách định kỳ, cho một
khoảng thời gian khởi động bằng nguyên một xung nhịp 32kHz, và kết nối nó tới
VREF để làm t−ơi lại điện áp tham chiếu trong nguyên một xung nhịp 32kHz tiếp theo
nh− đ−ợc chỉ trong Hình 4-7.
Trong khoảng thời gian xung nhịp thứ hai của chu kỳ làm t−ơi, mạch LVD đ−ợc
cho phép để ổn định trong suốt khoảng thời gian xung nhịp 32kHz ở mức cao. Trong
khoảng thời gian xng nhịp thứ hai ở mức thấp, ngắt LVD đ−ợc cho phép xảy ra.
76
Tài liệu về PSoC – Bản quyền thuộc Nguyễn Xuân Sơn – ĐKTĐ1 – K44 – ĐHBKHN
- Bandgap is turn on, but not yet connected to VREF: Bandgap đ−ợc bật, nh−ng
vẫn ch−a đ−ợc nối với VREF
- Bandgap output is connected to VREF. Voltage is refreshed: Đầu ra bandgap
đ−ợc nối với VREF
- Bandgap is powered down until next refresh cycle: Bandgap đ−ợc giảm nguồn
cho đến chù kỳ làm t−ơi tiếp theo.
- VREF is slowly leaking to ground: VREF bị rò rỉ điện áp xuống đất một cách
chậm chạp.
- Low voltage monitors are active during CLK32 low: Bộ theo dõi điện áp thấp
đ−ợc kích hoạt trong xuốt quá trình CLK32 ở mức thấp.
Hình 4-7: Hoạt động làm t−ơi bandgap
Tốc độ làm t−ơi tỷ lệ với tốc độ xung nhịp 32kHz và đ−ợc điều khiển bởi chu kỳ
nhiệm vụ nghỉ của hệ thống. (Power System Sleep Duty Cycle). PSSDC, bit[7:6] của
thanh ghi ECO_TR. Bảng 4 - 32 liệt kê một số giá trị có thể lựa chọn. Thiết lập mặc
định (128 lần đếm cho bộ định thời nghỉ) thích hợp với nhiều ứng dụng, dòng điện tiêu
tốn trung bình d−ới 5uA.
Bảng 4-32: Bảng lựa chọn chu kỳ nhiệm vụ nghỉ của hệ thống
PSSDC Số đếm của bộ định thời nghỉ Thời gian t−ơng ứng
00b (mặc định) 256 8 ms
01b 1024 31.2 ms
10b 64 2 ms
11b 16 500 us
4.5.2.3. Bộ định thời Watchdog (WDT)
Tại thời điểm khởi động chíp, WDT khởi đầu là bị đóng. Bit PORS trong thanh
ghi điều khiển hệ thống sẽ điều khiển mở WDT. Tại lúc khởi động bit PORS khởi đầu
đ−ợc đặt là 1, nó chỉ rõ rằng hoặc sự kiện POR hay XRES đã xảy ra. WDT đ−ợc mở
bằng cách xóa bit PORS. Một khi bit này đ−ợc xóa và bộ định thời watchdog đi vào
hoạt động thì nó sẽ không thể bị đóng (vì bit PORS không thể đ−ợc set lên 1 bởi vi
ch−ơng trình, nó chỉ có thể bị xóa). Cách duy nhất để vô hiệu hóa chức năng watchdog
sau khi nó đã đ−ợc mở là thông qua POR hay XRES. Mặc dù WDT bị vô hiệu hóa từ
lúc POR hay XRES cho đến hết mã khởi đầu, nh−ng toàn bộ mã ch−ơng trình nên đ−ợc
viết nh− thể là nó đang đ−ợc mở. (WDT cần phải đ−ợc xóa một cách định kỳ). Lý do là
vì trong mã khởi đầu sau sự kiện WDR (watchdog reset), bộ định thời watchdog đ−ợc
mở và tất cả các mã ch−ơng trình cần phải biết điều này.
Bộ định thời watchdog bằng ba lần đếm đầu ra ngắt của bộ định thời nghỉ và vì
vậy, khoảng thời gian watchdog bằng 3 lần khoảng thời gian lựa chọn của bộ định thời
nghỉ. Khi ngắt của bộ định thời nghỉ đ−ợc xác nhận, bộ định thời watchdog bắt đầu
tăng. Khi bộ đếm đếm đến ba, giá trị đếm cuối đ−ợc xác nhận. Giá trị đếm cuối này
đ−ợc ghi nhận bởi xung nhịp 32kHz. Bởi vây, tín hiệu reset Watchdog sẽ chuyển lên
mức cao sau xung nhịp 32kHz tiếp theo và đ−ợc giữ để xác nhận trong một chu kỳ. Bộ
Flip-Flop ghi nhận giá trị đếm cuối của WDT không đ−ợc reset bởi tín hiệu reset WDT
khi nó đ−ợc xác nhận, nh−ng lại đ−ợc reset bởi bất cứ một reset nào khác.
77
Tài liệu PSoC – biên dịch từ Datasheet bởi Nguyễn Xuân Sơn ĐKTĐ1 – K44 - ĐHBKHN
Hình 4 - 8: Watchdog reset
Một khi đ−ợc cho phép thì WDT cần phải đ−ợc xóa một cách định kỳ bởi vi
ch−ơng trình. Điều này đ−ợc thực hiện với một lệnh viết vào thanh ghi RES_WDT.
Lệnh viết này là một giá trị không phụ thuộc, vì thế bất cứ lệnh ghi nào đều xóa bộ
định thời watchdog. Nếu vì một lý do nào đó mà vi ch−ơng trình không xóa watchdog
trong khoảng thời gian lựa chọn thì mạch WDT sẽ sinh ra một WDR (watchdog reset)
tới chíp. WDR t−ơng đ−ơng với những reset khác. Tất cả các thanh ghi đều đ−ợc đ−a
về giá trị mặc định. Một điều quan trọng cần phải nhớ về reset Watchdog là nó là khởi
đầu RAM có thể bị đóng (IRAM trong thanh ghi CPU_SCR1). Trong tr−ờng hợp này,
thành phần của SRAM không bị ảnh h−ởng, vì thế khi WDR xảy ra thì các biến của
ch−ơng trình tồn tại xuyên qua sự kiện reset này.
Trong ứng dụng thực hành thì phải biết rằng khoảng thời gian của bộ định thời
Watchdog nằm vào khoảng 2 đến 3 lần khoảng thời gian của bộ định thời nghỉ. Cách
duy nhất để đảm bảo khoảng thời gian watchdog bằng đủ 3 lần khoảng thời gian của
bộ định thời nghỉ là xóa bộ định thời nghỉ khi xóa thanh ghi WDT. Nh−ng điều này là
không thể trong những ứng dụng sử dụng bộ định thời nghỉ nh− là một đồng hồ thời
gian thực. Trong tr−ờng hợp này thì vi ch−ơng trình xóa thanh ghi WDT mà không xóa
bộ định thời nghỉ, điều này có thể xảy ra tại bất cứ điểm nào trong khoảng thời gian
nghỉ. Nếu nó xảy ra ở gần giá trị cuối của bộ định thời nghỉ thì kết quả là khoảng thời
gian WDT sẽ chỉ lớn hơn 2 lần khoảng thời gian nghỉ.
78
Tài liệu về PSoC – Bản quyền thuộc Nguyễn Xuân Sơn – ĐKTĐ1 – K44 – ĐHBKHN
Ch−ơng 5: Hệ thống khối PSoC Số
Cấu trúc của hệ thống số.
Hình vẽ d−ới đây mô tả cấu trúc cao nhất của hệ thống số trong PSoC. Mỗi thành
phần đều đ−ợc mô tả chi tiết trong phần này.
Hình 5 - 1: Sơ đồ khối mô tả cấu trúc các khối số trong PSoC
Các thanh ghi số
Bảng sau đây liệt kê toàn bộ các thanh ghi số của hệ thống số trong PSoC
Bảng 5 - 1: Bảng thống kê các thanh ghi số
Address Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Access
GLOBAL DIGITAL INTERCONNECT (GDI) REGISTERS
1,D0h GDI_O_IN GIONOUT7 GIONOUT6 GIONOUT5 GIONOUT4 GIONOUT3 GIONOUT2 GIONOUT1 GIONOUT0 RW : 00
1,D1h GDI_E_IN GIENOUT7 GIENOUT6 GIENOUT5 GIENOUT4 GIENOUT3 GIENOUT2 GIENOUT1 GIENOUT0 RW : 00
1,D2h GDI_O_OU GOOUTIN7 GOOUTIN6 GOOUTIN5 GOOUTIN4 GOOUTIN3 GOOUTIN2 GOOUTIN1 GOOUTIN0 RW : 00
1,D3h GDI_E_OU GOEUTIN7 GOEUTIN6 GOEUTIN5 GOEUTIN4 GOEUTIN3 GOEUTIN2 GOEUTIN1 GOEUTIN0 RW : 00
DIGITAL ROW REGISTERS
x,B0h RDI0RI RI3[1:0] RI2[1:0] RI1[1:0] RI0[1:0] RW : 00
x,B1h RDI0SYN RI3SYN RI2SYN RI1SYN RI0SYN RW : 00
x,B2h RDI0IS BCSEL[1:0] IS3 IS2 IS1 IS0 RW : 00
x,B3h RDI0LT0 LUT1[3:0] LUT0[3:0] RW : 00
x,B4h RDI0LT1 LUT3[3:0] LUT2[3:0] RW : 00
x,B5h RDI0RO0 GOO5EN GOO1EN GOE5EN GOE1EN GOO4EN GOO0EN GOE4EN GOE0EN RW : 00
x,B6h RDI0RO1 GOO7EN GOO3EN GOE7EN GOE3EN GOO6EN GOO2EN GOE6EN GOE2EN RW : 00
x,B8h RDI1RI RI3[1:0] RI2[1:0] RI1[1:0] RI0[1:0] RW : 00
x,B9h RDI1SYN RI3SYN RI2SYN RI1SYN RI0SYN RW : 00
x,BAh RDI1IS BCSEL[1:0] IS3 IS2 IS1 IS0 RW : 00
x,BBh RDI1LT0 LUT1[3:0] LUT0[3:0] RW : 00
x,BCh RDI1LT1 LUT3[3:0] LUT2[3:0] RW : 00
x,BDh RDI1RO0 GOO5EN GOO1EN GOE5EN GOE1EN GOO4EN GOO0EN GOE4EN GOE0EN RW : 00
79
Tài liệu PSoC – biên dịch từ Datasheet bởi Nguyễn Xuân Sơn ĐKTĐ1 – K44 - ĐHBKHN
x,BEh RDI1RO1 GOO7EN GOO3EN GOE7EN GOE3EN GOO6EN GOO2EN GOE6EN GOE2EN RW : 00
DIGITAL BLOCK REGISTERS
Data and Control Register
0,20h DBB00DR0 Data[7:0] # : 00
0,21h DBB00DR1 Data[7:0] W : 00
0,22h DBB00DR2 Data[7:0] # : 00
0,23h DBB00CR0 Function Control/Status bit for selected function[6:0] Enable # : 00
1,20h DBB00FN Data Invert BCEN End/Single Mode[1:0] Function[2:0] RW : 00
1,21h DBB00IN Data Input[3:0] Clock Input[3:0] RW : 00
1,22h DBB00OU AUXCLK AUXEN AUX IO Select[1:0] OUTEN Output Select[1:0] RW : 00
0,24h DBB01DR0 Data[7:0] # : 00
0,25h DBB01DR1 Data[7:0] W : 00
0,26h DBB01DR2 Data[7:0] # : 00
0,27h DBB01CR0 Function Control/Status bit for selected function[6:0] Enable # : 00
1,24h DBB01FN Data Invert BCEN End/Single Mode[1:0] Function[2:0] RW : 00
1,25h DBB01IN Data Input[3:0] Clock Input[3:0] RW : 00
1,26h DBB01OU AUXCLK AUXEN AUX IO Select[1:0] OUTEN Output Select[1:0] RW : 00
0,28h DBB02DR0 Data[7:0] # : 00
0,29h DBB02DR1 Data[7:0] W : 00
0,2Ah DBB02DR2 Data[7:0] # : 00
0,2Bh DBB02CR0 Function Cont
Các file đính kèm theo tài liệu này:
- Tai_lieu_ve_PSoC.pdf