Lưu ý khi chuyển từ chế độ đồng bộ (Synchronous) sang bất đồng bộ
(Asynchronous): giá trị trong thanh ghi điều khiển (TCCR2) có thể bị mất trong q trình chuyển đổi giữa 2 chế độ này. Cần phải theo trình tự sau:
• Cấm ngắt Timer/Counter 2 (Clear bit OCIE2 và TOIE2). • Chọn nguồn clock cần chuyển (thiết lập giá trị AS2). • Ghi giá trị mới vào TCNT2, OCR2 và TCCR2.
• Trường hợp chuyển sang chế độ bất đồng bộ: chờ TCN2UB, OCR2UB và TCR2UB.
• Clear cờ ngắt Timer/Counter 2. • Cho phép ngắt trở lại (nếu cần).
Bộ dao động được thiết kế tối ưu để sử dụng với thạch anh 32.768kHz. Sử dụng nguồn clock ngồi lên chân TOSC1 có thể khiến timer/counter 2 hoạt động khơng chính xác. Tần số clock CPU phải gấp trên 4 lần tần số bộ dao động.
Khi ghi giá trị mới vào 1 trong 3 thanh ghi TCNT2, OCR2 hoặc TCCR2, giá trị đó được đưa vào bộ nhớ tạm của thanh ghi tương ứng và được chốt lại sau 2 sườn lên ở chân TOSC1. Do vậy không được ghi giá trị mới trước khi giá trị hiện tại trong thanh ghi tạm được chuyển tới thanh ghi thực sự. sử dụng thanh ghi trạng thái hoạt động bất đồng bộ (Asynchronous Status Register) để kiểm tra khi nào giá trị từ thanh ghi tạm được chuyển tới đích.
Khi thực thi chế độ tiết kiệm năng lượng (Power save) hoặc chế độ chờ mở rộng (Extended Standby), sau khi đã ghi giá trị vào TCNT2, OCR2 hoặc TCCR2, cần
phải chờ cho giá trị đó được ghi vào hoàn toàn (cập nhật hoàn toàn) nếu
timer/counter 2 được sử dụng để đánh thức (wake up) MCU, nếu không, MCU sẽ đi vào chế độ ngủ trước khi những giá trị trên được cập nhật. Điều này rất quan trọng trong trường hợp sử dụng ngắt so sánh timer/counter 2 (Output Compare 2 Interrupt) để đánh thức MCU dậy, vì khi giá trị đang được ghi vào OCR2 hoặc TCNT2, chức năng Output Compare bị cấm tự động (bằng phần cứng). Như vậy nếu giá trị chưa được cập nhật, MCU sẽ ngủ trước khi bit OCR2UB xóa về 0, và như thế, sẽ khơng bao giờ có Compare Match Interrupt, và MCU sẽ khơng được đánh thức dậy. Khi Timer/Counter 2 sử dụng để đánh thức MCU từ chế độ tiết kiệm năng lượng hay chế độ chờ mở rộng, một điểm cần lưu ý khi thực thi lại (re- enter) các chế độ này: mức logic của interrupt cần 1 chu kỳ TOSC1 để reset. Nếu thời gian giữa wake-up và re-entering chế độ ngủ ngắn hơn 1 chu kỳ TOSC1, ngắt sẽ không xảy ra và MCU sẽ không thể thức dậy được. Cần theo trình tự sau:
• Ghi giá trị vào TCCR2, TCNT2 hoặc OCR2.
• Chờ cho đến khi Cờ báo bận cập nhật (Update Busy Flag) trong ASSR về 0. • Truy nhập vào chế độ Power save hoặc Extended Standby.
Trong chế độ hoạt động bất đồng bộ, bộ dao động 32.768kHz của Timer/Counter 2 luôn luôn chạy, trừ chế độ nguồn giảm (Powerdown) hoặc chế độ chờ (Standby). Sau sự kiện reset khi bật nguồn (Powerup Reset) hoặc đánh thức từ chế độ nguồn giảm hoặc chế độ chờ (wake-up from Powerdown or Standby mode), phải cẩn thận rằng bộ dao động có thể cần lâu hơn 1 giây để ổn định. Như vậy khuyến cáo rằng nên đợi ít nhất 1 giây sau khi Power-up hoặc wake-up từ Power-down hoặc Standby khi sử dụng Timer/Counter 2. Nội dung của toàn bộ thanh ghi
Timer/Counter 2 sẽ bị mất sau khi wake-up từ Power-down hoặc Standby.
Mô tả chức năng đánh thức từ chế độ Power Save hoặc chế độ chờ mở rộng trong hoạt động bất đồng bộ của timer: Khi xảy ra điều kiện ngắt, tiến trình wake-up được bắt đầu vào chu kì tiếp theo sau đó, điều đó có nghĩa là timer luôn chạy trước 1 chu kỳ trước khi CPU truy xuất và đọc giá trị counter trong timer. Sau khi được đánh thức, MCU bị trì hỗn 4 chu kỳ, thực thi chương trình ngắt và chạy tiếp chương trình theo sau dịng lệnh SLEEP.
Đọc giá trị counter TCNT2 quá nhanh sau khi được đánh thức từ chế độ Power Save có thể khơng chính xác. Vì counter tăng bởi xung clock TOSC, việc đọc giá trị counter phải thực hiện thơng qua thanh ghi được đồng bộ hóa với clock hệ thống. Quá trình đồng bộ xảy ra mỗi sườn lên của TOSC1. Khi đánh thức từ chế độ Power Save, clock hệ thống được kích hoạt trở lại, giá trị đọc ra từ thanh ghi TCNT2 lúc đó là giá trị trước khi truy nhập vào chế độ ngủ, cho đến sườn lên tiếp theo của TOSC1 thì giá trị đó mới được cập nhật bởi giá trị hiện tại. Pha của clock TOSC sau khi đánh thức khơng thể dự báo được, nó phụ thuộc vào thời gian đánh thức. Phải theo trình tự như sau:
• Ghi bất kì giá trị nào vào thanh ghi OCR2 hoặc TCCR2. • Chờ cho cờ Update Busy xóa.
Trong hoạt động bất đồng bộ, việc đồng bộ cờ ngắt (Interrupt Flag) cho timer bất đồng bộ mất 3 chu kì CPU cộng với 1 chu kỳ timer. Vì vậy, timer ln đi trước việc CPU đọc giá trị timer ít nhất 1 chu kỳ nếu dựa vào việc thiết lập cờ ngắt. Chân ngõ ra Output Compare được thay đổi dựa theo clock timer chứ không được đồng bộ với clock hệ thống.
10.4.6. Mô tả thanh ghi
Timer/Counter Control Register - TCCR2 – Thanh ghi điều khiển
• Bit 7 – FOC2: Force Output Compare – Kích (ép) Output Compare bằng tay. • Bit 6, 3 – WGM21:0: Waveform Generation Mode – Chế độ phát sóng.
• Bit 5:4 – COM21:0: Compare Match Output Mode – Chế độ ngõ ra khi Compare Match.
• Bit 2:0: CS22:0: Clock Select – Lựa chọn nguồn clock.
Timer/Counter Register – TCNT2 – Thanh ghi Timer/Counter 2
(8-bit)
Output Compare Register – Thanh ghi so sánh
(8 bit)
Timer/Counter Interrupt Mask Register – TIMSK – Thanh ghi mặt nạ ngắt
• Bit 7 – OCIE2: Timer/Counter 2 Output Compare Match Interrupt Enable – Cho phép ngắt khi có Output Compare Match.
• Bit 6 – TOIE2: Timer/Counter 2 OverFlow Interrupt Enable – Cho phép ngắt tràn.
• Bit 7 – OCF2: Output Compare Flag 2 – Cờ ngắt Output Compare. • Bit 6 – TOV2: Timer/Counter 2 OverFlow Flag – Cờ ngắt tràn.