VI.1 Reset
Các địa chỉ $FFFF và FFFE là địa chỉ cho RESET. Khi RESET tác động, chương trình hiện hành sẽ ngừng thực thi, CPU nạp vector (nội dung địa chỉ vector) và đưa vào PC, rồi địa chỉ chương trình được đưa vào PC.
Reset cĩ thể xảy ra khi : bật nguồn cung cấp, reset ngồi, reset do hệ thống COP hay reset do bộ kiểm sốt xung clock.
Aûnh hưởng của reset
Khi reset xảy ra các bit điều khiển trở lại trạng thái khởi động. Tùy theo nguyên nhân gây ra reset mà các vector reset được lấy ở các vùng nhớ khác nhau như bảng sau :
Nguyên nhân Normal Mode Special hay Bootstrap POR hay RESET
Clock Monitor COP Watchdog Timeout $FFFE, $FFFF $FFFC, $FFFD $FFFA, $FFFB $BFFE, $BFFF $BFFC, $BFFD $BFFA, $BFFB Sau khi reset hệ thống bị ảnh hưởng như sau :
CPU
Sau khi reset CPU tìn về vector khởi động lại tại địa chỉ $FFFE, $FFFF ($BFFE, BFFF nếu trong chế độ Special test và Bootstrap) trong suốt 3 chu kỳ đầu và bắt đầu thực hiện lệnh . Thanh ghi SP cĩ giá trị khơng xác định, do đĩ ta cần khởi động Stack Pointer sau khi Reset.
Hai bit cờ X và I trên thanh ghi CCR được set để che tất cả các yêu cầu ngắt. Thậm chí, bit S trong CCR cũng được set để khơng cho phép Stop mode.
Bản đồ bộ nhớ
Sau khi reset, thanh ghi INIT khởi tạo lại giá trị ban đầu là $01, đặt 256 bytes của RAM tại địa chỉ $0000 - $00FF và các thanh ghi điều khiển cĩ địa chỉ tại $1000 - $103F.
Timer
Trong khi reset hệ thống đếm thời gian (timer) thì được nạp giá trị $0000 . Tất cả các bit (prescale) bị xố. Tất cả các thanh ghi so sánh ngõ ra thì được nạp gía trị $FFFF, tất cả các thanh ghi bắt giữ ngõ vào khơng xác định.
Tất cả các ngắt thời gian đều bị cấm, chức năng chốt ngõ vào và so sánh ngõ ra cũng khơng được cho phép, do đĩ các chân liên quan đến hai chức năng này được dùng như chân xuất nhập song song.
Cop Watchdog
Hệ thống COP được cho phép nếu bit NOCOP trong thanh ghi CONFIR bị xố và bị cấm nếu NOCOP được set.
Các ngoại bên trong MCU như bộ tích lũy xung, bộ biến đổi A/D, giao tiếp truyền nối SCI , giao tiếp ngoại vi nối tiếp SPI … đều bị cấm. Các chân vào ra tương ứng với các ngoại vi này cũng được dùng như chân xuất nhập song song.
VI.2 Hệ thống ngắt của vi xử lý MC68HC11 (interrupt)
Bảng địa chỉ vector ngắt và vector reset
Địa chỉ vector Nguồn ngắt Bit mặt nạ che CCR Che cục bộ FFC0, C1-FFD4,D5 Được bảo quản
FFD6,D7
Hệ thống nối tiếp SCI - thanh ghi dữ liệu đầy - bộ nhận tràn
- thanh ghi dữ liệu truyền thống - truyền xong - dị tìm đường truyền I RIE RIE TIE TCIE ILIE
FFD8, D9 Truyền nối tiếp SPI hồn tất I SPIE FFDA, DB Tích lũy xung ngõ vào cạnh I PAII
FFDC, DD Tích lũy xung tràn I PAOVI
FFDE, DF Tràn Timer I TOI
FFE0, E1 Bắt giữ ngõ vào 4 /so sánh ngõ ra 5 bộ Timer I I4/O5I
FFE2, E3 So sánh ngõ ra 4 I OC4I
FFE4, E5 So sánh ngõ ra 3 I OC3I
FFE6, E7 So sánh ngõ ra 2 I OC2I
FFE8, E9 So sánh ngõ ra 1 I OC1I
FFEA, EB Bắt giữ ngõ vào 3 I IC3I
FFEC, ED Bắt giữ ngõ vào 2 I IC2I
FFEE, EF Bắt giữ ngõ vào 1 I ICII
FFF0, F1 Ngắt thời gian thực I RTII
FFF2, F3 IRQ (chân bên ngồi) I Khơng
FFF4, F5 XIRQ X Khơng
FFF6, F7 Ngắt phần mềm Khơng Khơng
FFF8, F9 Opcode khơng hợp lệ Khơng Khơng
FFF0A, FB Hỏng hĩc COP Khơng NOCOP
FFFC, FD Hỏng clock monitor Khơng CME
Các ngắt ngưng thực thi lệnh hiện tại để thực thi chương trình phục vụ ngắt. Sau khi kết thúc chương trình phục vụ ngắt các thanh ghi sẽ được phục hồi về trạng thái trước khi cĩ ngắt xảy ra, chương trình chính sẽ tiếp tục được thực thi như chưa hề cĩ ngắt xảy ra.
Bộ vi xử lý 68HC11 cĩ 18 thanh ghi ngắt, trong đĩ 15 yêu cầu ngắt của các ngoại vi bên trong là các ngắt che được, các chuơng trình phục vụ ngắt này chỉ cĩ thể thực thi khi bit I trên thanh ghi CCR bị xố. 3 ngắt cịn lại là các ngắt khơng che được. Địa chỉ vector ngắt được cho trong bảng.
Nếu cĩ 2 hay nhiều yêu cầu ngắt đồng thời, MCU sẽ phục vụ ngắt cĩ ưu tiên cao trước, các ngắt cịn lại sẽ được phục vụ sau. Thứ tự của các ngắt được xếp theo thứ tự giảm dần như sau :
• POR hay reset.
• Reset do bộ kiểm sốt xung clock.
• Reset do hệ thống COP.
• Ngắt mã lệnh khơng hợp lệ (Illegal Opcode Interrupt).
• Ngắt mềm SWI (Softwave Interrupt).
• Độ ưu tiên của các ngắt che được : (sau khi reset).
• Ngắt tràn thời gian TOI (Timer Overflow Interrupt).
• Ngắt tràn bộ tích lũy xung PAOI (Pulse Accumulator Overflow).
• Ngắt cạnh vào bộ tích lũy xung PAI.
• Ngắt hệ thống SPI.
• Ngắt hệ thống SCI.
• Ngắt IRQ.
• Ngắt thời gian thực RTI (Real Time Interrupt).
• Ngắt chốt ngõ vào 1 (Input Capture 1).
• Ngắt chốt ngõ vào 2 (Input Capture 2).
• Ngắt chốt ngõ vào 3 (Input Capture 3).
• Ngắt so sánh ngõ ra 1 (Output Capture 1).
• Ngắt so sánh ngõ ra 2 (Output Capture 2).
• Ngắt so sánh ngõ ra 3 (Output Capture 3).
• Ngắt so sánh ngõ ra 4 (Output Capture 4).
• Ngắt chốt ngõ vào hoặc so sánh ngõ ra 5.
Để thay đổi độ ưu tiên của các ngắt che được ta lập trình 4 bit PSEL[3:] trên thanh ghi HPRIO (Hightest Priority Interrupt). Ngắt được chọn cĩ độ ưu tiên cao nhất cĩ độ ưu tiên thấp chỉ thấp hơn XIRQ.
Mã chọn ưu tiên của các ngắt như sau :
PSEL[3:0] Nguồn ngắt được xúc tiến
0000 Tràn Timer
0001 Tràn bộ tích lũy xung
0010 Cạnh ngõ vào bộ tích lũy xung 0011 Truyền SPI hồn tất
0100 Hệ thống SCI
0101 Được bảo quản
0110 IRQ (chân bên ngịai hay I/O song song) 0111 Ngắt thời gian thực 1000 Bắt giữ ngõ vào 1 1001 Bắt giữ ngõ vào 2 1010 Bắt giữ ngõ vào 3 1011 So sánh ngõ ra 1 1100 So sánh ngõ ra 2 1101 So sánh ngõ ra 3 1110 So sánh ngõ ra 4 1111 Bắt giữ ngõ vào 4/ so sánh ngõ ra 5
Khi reset cả bit X và bit I trên thanh ghi đều được set nên cấm tất cả các ngắt , kể cả XIRQ. Sau khi đã khởi động hệ thống, phần mềm cĩ thể xố bit X, cho phép ngắt XIRQ. Ngắt mềm SWI là một lệnh và khơng bị cấm bởi các bit che ngắt tồn cục trên thanh ghi mã CCR. Việc thực hiện lệnh SWI làm set bit nên khi ngắt mềm đã bắt đầu thì các ngắt khác đều bị cấm đến khi SWI được phục vụ xong hoặc cho đến khi phần mềm xĩa bit I các ngắt che được mới được thực thi.
VI.3 Sử dụng ngắt Reset và các vectơ ngắt khác của MCU68HC11
Các vectơ ngắt của các MCU đều ở từ địa chỉ $FFC0 đến $FFFF. Tuy nhiên, việc sử dụng các vectơ này cịn tuỳ thuộc vào chế độ hoạt động được lựa chọn (Single Chip, Boostrap, Special Test hay Expanded) và cách bố trí bộ nhớ của mỗi MCU.
Đối với chế độ Boostrap, sau khi reset, vectơ reset sẽ nhảy đến ROM Boostrap nằm ở địa chỉ $BF40, MCU sẽ tiếp tục thực hiện chương trình đã nạp sẵn trong ROM này (được đưa vào bởi nhà sản xuất). Chương trình này sẽ khởi động hệ thống SCI, kiểm tra điều kiện bảo mật (security option), nhận 256 byte chương trình thơng qua SCI (được truyền từ Pcbug11 trên máy tính qua cổng COM) và nhảy đến thực thi chương trình đã tải xuống tại địa chỉ $0000 trên RAM nội. Nếu muốn yêu cầu MCU nhảy đến chương trình đã nạp tại vùng địa chỉ nào đĩ, sau khi
khởi động ta phải dùng một lệnh để thực hiện điều này trong một phần mềm giao tiếp với 68HC11 là Pcbug11 ( G $xxxx, với $xxxx là địa chỉ cần nhảy đến).
Để bảo đảm sau khi reset, MCU sẽ nhảy đến thực hiện chương trình trong EEPROM nội ở chế độ Boostrap, cĩ một cách như sau : sau khi khởi động hệ thống SCI và Port D (khi nhấn Reset ở chế độ Boostrap), chương trình bootloader sẽ chờ ký tự $FF được gửi xuống để xác định mức baud rate cho việc download chương trình từ Pcbug11 vào 256 Byte RAM nội, nếu lúc này ký tự Break ($00) được gửi xuống thay vì $FF, MCU sẽ nhảy đến địa chỉ EEPROM ($B600) và thực hiện chương trình đã nạp tại địa chỉ này. Vì chương trình bootloader cĩ truyền ký tự Break, ta cĩ thể nối hai chân RxD và TxD lại với nhau và dùng điện trở kéo lên nguồn, sau đĩ nhấn reset trong chế độ Boostrap, chương trình tại EEPROM sẽ được thực thi. Chú ý : việc đưa chân RxD xuống mức thấp (nối đất chẳng hạn)sẽ khơng đưa kết quả tương tự vì phải cĩ sự chuyển từ mức cao xuống mức thấp để báo bắt đầu một bit START. Sau khi MCU đã nhảy đến EEPROM nội, ta phải cách ly hai chân TxD và RxD nếu muốn sử dụng hệ thống SCI.
Cĩ thể thấy phương pháp trên khá phức tạp, để tránh trường hợp này, cĩ hai cách. Một là cho MCU hoạt động ở chế độ mở rộng (Expanded) như vậy vectơ reset cĩ thể được trỏ đến chương trình mong muốn (bằng cách ghi địa chỉ chương trình vào$FFFE, địa chỉ này phải ở vùng bộ nhớ ngồi), tuy nhiên cách này sẽ làm phức tạp phần cứng vì cần cĩ một mạch mở rộng bộ nhớ cho MCU. Cách thứ hai là cho MCU hoạt động ở chế độ Single chip, ở chế độ này đối với 68HC11E9, dựa vào chương trình Buffalo trong 8 Kbyte ROM nội, ta cĩ thể nối hai chân 1 và 2 của J2 và remove Jumper J3, sau khi reset , MCU sẽ nhảy đến địa chỉ $B600. Các vectơ ngắt được sử dụng trong 68HC11E9 là các giả vectơ (pseudo vectơ) vì chúng cĩ thể sử dụng như những vectơ thực nằm ở địa chỉ $00C0 đến $00FF trong RAM nội. Mỗi vectơ cĩ 3 byte (thay vì 2 như các vectơ thường) vì cần đủ để viết một lệnh nhảy (JMP) đến địa chỉ chương trình ngắt mong muốn. Chương trình chính phải cĩ các lệnh ghi địa chỉ chương trình ngắt vào các vectơ này để bảo đảm hoạt động đúng, ví dụ muốn dùng ngắt IC1 (cĩ Pseudo vectơ là$00E8-$00EA, nhãn chương trình ngắt là IC1SRT), sau khi khởi động Stack pointer trong chương trình chính, ta sẽ ghi thêm một số dịng lệnh sau:
LDAA #$7E STAA $00E8 LDD #IC1SRT STD $00E9
Các dịng lệnh này tương tự với lệnh JMP IC1SRT được viết tại địa chỉ $00E8. Như vậy, khi cĩ sự kiện xảy ra tương ứng, MCU sẽ tìm Pseudo vectơ cần thiết và nhảy đến địa chỉ đã gán trong các vectơ này.
Đối với 68HC11E2, các thao tác đơn giản hơn vì MCU này khơng cĩ ROM nội và 2Kbyte EEPROM nằm ở địa chỉ $F800-$FFFF. Như vậy các ta cĩ thể sử dụng trực tiếp các vectơ ngắt. Tuy nhiên, để nạp chương trình vào EEPROM nội, cũng như 68HC11E9, ta đều phải sử dụng chế độ Boostrap. Sau đĩ remove các Jumper tương ứng để chọn chế độ Single Chip trước khi nhấn Reset.
Khai báo các biến (hoặc các thanh ghi)
Địa chỉ các chương trình ngắt tại các Pseudo vectơ Chương trình chính Chương trình con 1 Chương trình con 2 .... Chương trình ngắt 1 Chương trình ngắt 2 ... End $00C4 $00FF $0000 $B600 $B7FF Bắt đầu Thân chương trình Kết thúc
Khai báo các biến (hoặc các thanh ghi)
Chương trình chính Chương trình con 1 Chương trình con 2 .... Chương trình ngắt 1 Chương trình ngắt 2 ... Địa chỉ chương trình ngắt tại các vectơ End $00FF $F800 $FFFF $FFC0 $0000 68HC11E9
Cấu trúc chương trình cĩ dùng ngắt ở chế độ Single-chip 68HC11E2
CHƯƠNG V THIẾT KẾ MẠCH VÀ LẬP TRÌNH