Tài liệu về Thiết bị PSoC

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

pdf62 trang | Chia sẻ: maiphuongdc | Lượt xem: 1881 | Lượt tải: 2download
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:

  • pdfTai_lieu_ve_PSoC.pdf