Ngắt và xử lý ngắt trong àC AT90S8535

Một phần của tài liệu thiết kế hệ thống phần mềm cho C AT90S8535 (Trang 26 - 34)

àC AT90S8535 cung cấp 16 nguồn gây ngắt khác nhau và một ngắt Reset. Các ngắt này và ngắt Reset có một vector chơng trình độc lập trong không gian bộ nhớ chơng trình. Tất cả các ngắt đợc gán với các bit cho phép ngắt riêng và phải đợc thiết lập cùng với bit I trong thanh ghi SREG để cho phép ngắt xảy ra.

Vị trí địa chỉ thấp nhất trong không gian bộ nhớ chơng trình đợc tự động định nghĩa là địa chỉ của vector Reset, tiếp theo đó là địa chỉ của các vector ngắt khác. Danh sách đầy đủ của các vector ngắt đợc thể hiện trong bảng 2.3, bảng này cũng cho biết các cấp độ u tiên của các ngắt tuỳ theo vị trí địa chỉ của vector ngắt của nó theo nguyên tắc, địa chỉ càng thấp thì mức độ u tiên càng cao. RESET có mức u tiên cao nhất, tiếp theo là INT0 v.v...

Bảng 2.3 : Địa chỉ của các vector ngắt trong àC AT90S8535

TT vector ngắtĐịa chỉ Nguồn gây ngắt Định nghĩa ngắt

1 $000 RESET Reset và khởi động lại mạch Watchdog 2 $001 INT0 Yêu cầu ngắt từ bên ngoài cấp 0 3 $002 INT1 Yêu cầu ngắt từ bên ngoài cấp 1 4 $003 TIMER2 COMP Ngắt thích ứng so sánh của T/C 2 5 $004 TIMER2 OVF Ngắt tràn của T/C 2

6 $005 TIMER1 CAPT Ngắt lu giữ sự kiện của T/C 1 7 $006 TIMER1 COMPA Ngắt thích ứng so sánh A của T/C 1 8 $007 TIMER1 COMPB Ngắt thích ứng so sánh B của T/C 1 9 $008 TIMER1 OVF Ngắt tràn của T/C 1

10 $009 TIMER0 OVF Ngắt tràn của T/C 0

11 $00A SPI, STC Ngắt kết thúc truyền nối tiếp qua SPI 12 $00B UART, RX Ngắt kết thúc nhận dữ liệu của UART 13 $00C UART, UDRE Ngắt báo thanh ghi dữ liệu của UART rỗng 14 $00D UART, TX Ngắt hoàn thành truyền dữ liệu qua UART

15 $00E ADC Ngắt hoàn thành chuyển đổi ADC

16 $00F EE_RDY Ngắt báo EEPROM đã sẵn sàng R/W 17 $010 ANA_COMP Ngắt so sánh độ dài tín hiệu Analog

Một chơng trình bình thờng có thể thiết lập cho các địa chỉ của vector Reset và các vector ngắt khác nh sau :

Địa chỉ Lệnh Nhãn/toán hạng Giải thích

$000 rjmp RESET ;Điều khiển Reset

$001 rjmp EXT_INT0 ;Điều khiển IRQ0

$002 rjmp EXT_INT1 ;Điều khiển IRQ1

$003 rjmp TIM2_COMP ;Điều khiển so sánh Timer2

$004 rjmp TIM2_OVF ;Điều khiển tràn Timer2

$005 rjmp TIM1_CAPT ;Điều khiển bắt sự kiện Timer1

$006 rjmp TIM1_COMPA ;Điều khiển so sánh A của Timer1

$007 rjmp TIM1_COMPB ;Điều khiển so sánh B của Timer1

$008 rjmp TIM1_OVF ;Điều khiển tràn Timer1

$009 rjmp TIM0_OVF ;Điều khiển tràn Timer0

$00a rjmp SPI_STC ;Điều khiển kết thúc truyền dữ liệu qua SPI

$00b rjmp UART_RXC ;Điều khiển kết thúc UART RX

$00c rjmp UART_DRE ;Điều khiển thông báo hết dữ liệu trong UDR

$00d rjmp UART_TXC ;Điều khiển kết thúc UART TX

$00e rjmp ADC ;Ngắt thông báo kết thúc chuyển đổi ADC

$00f rjmp EE_RDY ;EEPROM sẵn sàng

$010 rjmp ANA_COMP ;Điều khiển bộ so sánh tín hiệu tơng tự

$011 MAIN: ldi r16, high(RAMEND) ;Bắt đầu chơng trình chính

$012 out SPH,r16 (adsbygoogle = window.adsbygoogle || []).push({});

$013 ldi r16, low(RAMEND)

$014 out SPL,r16

$015 <instr> xxx

... .... ....

Các nguồn Reset của àC AT90S8535.

àC AT90S8535 có 3 nguồn Reset khác nhau là : Power-on Reset (Reset khi nguồn bật), Reset ngoài và Watchdog Reset.

Power-on Reset : MCU đợc thiết lập lại khi điện áp cung cấp thấp hơn ngỡng điện áp Power-on Reset (VPOT).

Reset ngoài : MCU đợc thiết lập lại khi một mức điện áp thấp xuất hiện trên chân RESET trong khoảng thời gian lớn hơn 50ns.

Watchdog Reset : MCU đợc thiết lập lại khi chu kỳ của mạch Wachdog timer kết thúc và mạch Wachdog đợc cho phép.

Trong thời gian Reset, tất cả các thanh ghi I/O đợc thiết lập lại với giá trị khởi tạo và sự thực hiện chơng trình đợc bắt đầu từ địa chỉ $000. Lệnh đặt trong địa chỉ $000 phải là lệnh RJMP (lệnh nhảy quan hệ) để thi hành thủ tục Reset. Nếu một chơng trình không cho phép bất một ngắt nào, thì các vector ngắt sẽ không đợc sử dụng và đoạn mã của chơng trình có thể đợc đặt tại các vị trí này.

Thông tin về bất cứ nguồn Reset nào gây ra sự thiết lập lại MCU đợc thể hiện đầy đủ trong các bit của thanh ghi trạng thái MCU - MCUSR.

Thanh ghi trạng thái MCU : MCUSR

Bit 1 - EXTRF : Bit cờ Reset từ bên ngoài (EXTernal Reset Flag)

Sau một tín hiệu Reset Power-on, bit này không đợc xác định (X). Nó chỉ có thể đợc thiết lập bởi một tín hiệu reset từ bên ngoài. Một tín hiệu Reset Watchdog sẽ không thay đổi giá trị của bit này. Bit này đợc xoá bằng cách ghi giá trị logic 0 vào bit.

Bit 0 - PORF : Bit cờ Reset Power-on (Power-On Reset Flag)

Bit này chỉ đợc thiết lập bởi một tín hiệu Reset Power-on. Một tín hiệu Reset Watchdog hoặc tín hiệu Reset từ bên ngoài sẽ không làm thay đổi giá trị của bit này. Bit đợc xoá bằng cách ghi giá trị 0 vào bit.

Bảng 2. 4 : Giá trị của các bit EXTRF và PORF sau Reset

Nguồn Reset EXTRF PORF

Power-on Reset Không thay đổi 1

External Reset 1 Không thay đổi

Watchdog Reset Không thay đổi Không thay đổi

Có thể sử dụng các giá trị của các bít này để xác định một điều kiện gây ra Reset. Đối với phần mềm cần phải xoá cả hai bit PORF và EXTRF càng sớm càng tốt trong chơng trình. Kiểm tra giá trị của các bit PORF và EXTR trớc khi các bit đợc xoá. Nếu bit đợc xoá trớc khi xuất hiện một tín hiệu Reset từ bên ngoài hoặc của Watchdog, thì nguồn gốc của ngắt có thể đợc tìm thấy bằng cách sử dụng bảng 2.5.

Bảng 2.5 : Xác định nguồn Reset

EXTRF PORF Nguồn Reset

0 0 Watchdog Reset 0 1 Power-on Reset 1 0 External Reset 1 1 Power-on Reset

Xử lý ngắt của àC AT90S8535

Vi mạch điều khiển AT90S8535 có hai thanh ghi điều khiển mặt nạ ngắt 8 bit là : Thanh ghi mặt nạ ngắt chung - GIMSK (General Interrupt Mask register) và thanh ghi mặt nạ ngắt của các mạch Timer/Counter – TISMK (Timer/Counter Interrupt Mask register).

Khi xẩy ra một ngắt, bit cho phép ngắt chung I bị xoá và tất cả các ngắt bị cấm. Sử dụng phần mềm có thể thiết lập cho bit I để cho phép các ngắt đang bị che. Bit I đợc lập sau khi thực hiện lệnh trở về từ ngắt - RETI.

Khi bộ đếm chơng trình PC trỏ tới một vector ngắt hiện tại để thực hiện chơng trình con phục vu ngắt, phần cứng sẽ xoá cờ ngắt tơng ứng với ngắt pháp sinh. Một vài cờ ngắt cũng có thể đợc xoá bằng cách ghi giá trị logic 1 vào vị trí bit cờ đó. Nếu một điều khiện ngắt xẩy ra khi bit cho phép ngắt tơng ứng bị xoá, thì cờ ngắt sẽ đợc thiết lập và đợc nhớ cho đến khi ngắt đó đợc cho phép hoặc cờ đợc xoá bởi phần mềm.

Nếu một hoặc nhiều điều kiện ngắt xẩy ra khi bit cho phép ngắt chung bị xoá, các cờ ngắt tơng ứng sẽ đợc thiết lập và đợc nhớ cho đến khi bit cho phép ngắt chung đợc thiết lập và các ngắt sẽ đợc thực hiện tuỳ theo cấp u tiên của mỗi ngắt. (adsbygoogle = window.adsbygoogle || []).push({});

Chú ý : Mức ngắt ngoài không có cờ và sẽ chỉ đợc nhớ lâu bằng điều kiện ngắt tích cực. Ngoài ra, thanh ghi trạng thái SREG sẽ không tự động lu lại khi tham gia một ngắt và khôi phụ lại khi trở về từ chơng trình con phục vụ ngắt, do đó nó phải đợc điều khiển bằng phần mềm.

Các thanh ghi điều khiển ngắt của àC AT90S8535

Thanh ghi mặt nạ ngắt chung : GIMSK (General Interrupt Mask)

Bit 7 - INT1 : Bit cho phép ngắt ngoài mức 1 (External Interrupt Request 1 Enable) Khi bit INT1 đợc thiết lập và bit I trong thanh ghi trạng thái SREG đợc thiết lập, thì chân yêu cầu ngắt mức 1 từ bên ngoài đợc cho phép. Các bit ISC11 và ISC10 trong thanh ghi điều khiển chung MCUCR sẽ xác định ngắt từ bên ngoài đợc kích hoạt theo sờn lên hay sờn xuống hoặc theo mức nhận biết của tín hiệu trên chân INT1. Sự kích hoạt trên chân này sẽ gây ra một yêu cầu ngắt cho dù chân INT1 đợc cấu hình nh một đầu ra. Ngắt tơng ứng của một yêu cầu ngắt ngoài mức 1 đợc thực hiện từ địa chỉ $002 trong bộ nhớ chơng trình.

Bit 6 - INT0 : Bit cho phép ngắt ngoài mức 0 (External Interrupt Request 0 Enable) Khi bit INT0 và bit I trong thanh ghi trạng thái SREG đợc thiết lập, thì chân yêu cầu ngắt mức 0 từ bên ngoài đợc cho phép. Các bit ISC01 và ISC00 trong thanh ghi điều khiển chung MCUCR sẽ xác định ngắt từ bên ngoài đợc kích hoạt theo sờn lên hay sờn xuống hoặc theo mức nhận biết của tín hiệu trên chân INT0. Sự kích hoạt trên chân này sẽ gây ra một yêu cầu ngắt cho dù chân INT0 đợc cấu hình nh một đầu ra. Ngắt tơng ứng của một yêu cầu ngắt ngoài mức 0 đợc thực hiện từ địa chỉ $001 trong bộ nhớ chơng trình.

Bit 5 .. 0 : Reserved bits.

Thanh ghi cờ ngắt chung :GIFR(General Interrupt Flag Register)

Bit 7- INTF1 : Bit cờ ngắt ngoài mức 1 (External Interrupt Flag 1) Khi một tín hiệu theo sờn hoặc một sự thay đổi mức logic trên chân INT1 sẽ gây ra một yêu cầu ngắt, bit INTF1 đợc thiếp lập. Cờ này luôn đợc xoá khi chân này đợc thiết lập cho các ngắt có mức yêu tiên thấp, do đó trạng thái của một ngắt có mức u tiên thấp có thể đợc xác định bằng cách đọc bit này.

Nếu bit I trong thanh ghi trạng thái SREG và bit INT1 trong thanh ghi mặt nạ ngắt chung GIMSK đợc thiết lập, MCU sẽ nhẩy tới địa chỉ ngắt $002. Do

ngắt đợc tác động bởi tín hiệu sờn và sự thay đổi mức logic, cờ này đợc xoá khi thủ tục ngắt đợc thực hiện, nó cũng có thể đợc xoá bởi việc ghi giá trị logic 1 vào vị trí của cờ.

Bit 6 - INTF0 : Bit cờ ngắt ngoài mức 0 (External Interrupt Flag 0) Khi một tín hiệu sờn hoặc một sự thay đổi logic trên chân INT0 gây ra một yêu cầu ngắt, bit INTF0 đợc thiếp lập. Cờ này luôn đợc xoá (0) khi chân này đ- ợc đặt cấu hình cho các ngắt có mức u tiên thấp, nh vậy trạng thái của một ngắt có mức u tiên thấp có thể đợc xác định bằng cách đọc bit này.

Nếu bit I trong thanh ghi trạng thái SREG và bit INT1 trong thanh ghi mặt nạ ngắt chung GIMSK đợc thiết lập, MCU sẽ nhẩy tới địa chỉ ngắt $001. Do ngắt đợc tác động bởi tín hiệu sờn và sự thay đổi mức logic, cờ này đợc xoá khi thủ tục ngắt đợc thực hiện, nó cũng có thể đợc xoá bởi việc ghi giá trị logic 1 vào vị trí của cờ.

Thanh ghi mặt nạ ngắt của các bộ Timer/Counter : TIMSK

Bit 7 - OCIE2 : Bit cho phép ngắt so sánh bằng T/C2 (Timer/Counter2 Output Compare Match Interrupt Enable)

Khi bit OCIE2 đợc thiết lập và bit I trong thanh ghi trạng thái (SREG) đợc thiết lập, ngắt so sánh bằng T/C2 đợc cho phép. Ngắt tơng ứng tại địa chỉ $003 đợc thực hiện nếu xuất hiện một tín hiệu so sánh bằng trong T/C2 (tức là, khi bit OFC2 đợc thiết lập trong thanh ghi cờ ngắt T/C [TIFR]).

Bit 6 - TOIE2 : Bit cho phép ngắt tràn T/C2 (Timer/Counter2 Overflow Interrupt Enable)

Khi bit TOIE2 đợc thiết lập và bit I trong thanh ghi trạng thái (SREG) đợc thiết lập, ngắt tràn T/C2 đợc cho phép. Ngắt tơng ứng tại địa chỉ $004 đợc thực hiện nếu xuất hiện một tín hiệu tràn trong T/C2 (tức là, khi bit TOV2 đợc thiết lập trong thanh ghi cờ ngắt T/C [TIFR]).

Bit 5 - TICIE1 : Bit cho phép ngắt bắt sự kiện vào của T/C1 (Timer/Counter1 Input Capture Interrup Enable)

Khi bit TICIE1 đợc thiết lập và bit I trong thanh ghi trạng thái (SREG) đợc thiết lập, ngắt bắt sự kiện vào của T/C1 đợc cho phép. Ngắt tơng ứng tại đại chỉ $005 đợc thực hiện nếu xuất hiện một sự kiện gây ra sự bắt tín hiệu trên chân 20, PD6 (ICP) (tức là, khi bit ICF1 đợc thiết lập trong thanh ghi cờ ngắt T/C [TIFR]).

Bit 4 - OCIE1A : Bit cho phép ngắt so sánh bằng A của T/C1 (Timer/Counter1 Output CompareA Match Interrupt Enable)

Khi bit OCIE1A đợc thiết lập và bit I trong thanh ghi trạng thái đợc thiết lập, ngắt so sánh bằng A của T/C1 đợc cho phép. Ngắt tơng ứng tại đại chỉ $006 đợc thực hiện nếu xuất hiện một tín hiệu so sánh bằng A trong T/C1. (tức là, khi bit OCF1A đợc thiết lập trong thanh ghi cờ ngắt T/C [TIFR]).

Bit 3 - OCIE1A : Bit cho phép ngắt so sánh bằng B của T/C1 (Timer/Counter1 Output CompareB Match Interrupt Enable)

Khi bit OCIE1B đợc thiết lập và bit I trong thanh ghi trạng thái đợc thiết lập, ngắt so sánh bằng B của T/C1 đợc cho phép. Ngắt tơng ứng tại địa chỉ $007 đợc thực hiện nếu xuất hiện một tín hiệu so sánh bằnh B trong T/C1. (tức là, khi bit OCF1B đợc thiết lập trong thanh ghi cờ ngắt T/C [TIFR]).

Bit 2 - TOIE1 : Bit cho phép ngắt tràn của T/C1 (Timer/Counter1 Overflow Interrupt Enable)

Khi bit TOIE1 đợc thiết lập và bit I trong thanh ghi trạng thái (SREG) đợc thiết lập, ngắt tràn T/C1 đợc cho phép. Ngắt tơng ứng tại đại chỉ $008 đợc thực hiện nếu xuất hiện một tín hiệu tràn trong T/C1 (tức là, khi bit TOV1 đợc thiết lập trong thanh ghi cờ ngắt T/C [TIFR]).

Bit 1: Không sử dụng

Bit 0 - TOIE0 : Bit cho phép ngắt tràn của T/C0 (Timer/Counter0 Overflow Interrupt Enable)

Khi bit TOIE0 đợc thiết lập và bit I trong thanh ghi trạng thái (SREG) đợc thiết lập, ngắt tràn T/C0 đợc cho phép. Ngắt tơng ứng tại đại chỉ $009 đợc thực hiện nếu xuất hiện một tín hiệu tràn trong T/C0 (tức là, khi bit TOV0 đợc thiết lập trong thanh ghi cờ ngắt T/C [TIFR]).

Thanh ghi cờ ngắt của các bộ Timer/Counter : TIFR (Timer/Counter Interrupt Flag)

Bit 7 - OFC2 : Bit cờ so sánh đầu ra của T/C2 (Output compare Flag2) Bit OCF2 đợc thiết lập khi xuất hiện tín hiệu so sánh bằng giữa bộ T/C2 và dữ liệu trong OCR2 (Thanh ghi so sánh đầu ra của T/C 2). OCF2 đợc xoá bằng phần cứng khi thực hiện chơng trình điều khiển vector ngắt tơng ứng. Bit OCF2 có thể đợc xoá bằng cách ghi giá trị logic 1 vào cờ này. Khi bit I trong thanh ghi trạng thái SREG và bit OCIE (T/C2 compare Match Interupt Enable) và bit OCF2 đợc thiết lập, ngắt thích ứng so sánh của T/C2 đợc thực hiện. (adsbygoogle = window.adsbygoogle || []).push({});

Bit 6 - TOV2 : Bit cờ tràn của T/C2 (Timer/Counter2 Overflow Flag) Bit TOV2 đợc thiết lập khi xuất hiện một tín hiệu tràn trong T/C2. Bit TOV2 đợc xoá bởi phần cứng khi thực hiện chơng trình điều khiển vector ngắt tơng ứng. Một cách khác, bit TOV2 có thể đợc xoá bằng cách ghi giá trị 1 vào bit cờ này. Khi bit I trong thanh ghi trạng thái SREG và bit TOIE2 (T/C2 Overflow Interupt Enable) và bit TOV2 đợc thiết lập, ngắt tràn của T/C2 đợc thực hiện. Trong chế độ PWM, bit này đợc thiết lập khi bộ T/C1 bắt đầu đếm từ giá trị $0000

Bit 5 - ICF1 : Cờ bắt tín hiệu vào T/C1 (Input Capture Flag1)

Bit ICF1 đợc thiết lập để dựng cờ cho phép lu giữ một sự kiện đầu vào, và cho biết giá trị của T/C1 đã đợc chuyển đến thanh ghi bắt tín hiệu vào (ICR1). Bit ICF1 đợc xoá bởi phần cứng khi thực hiện chơng trình điều khiển vector

vào bit cờ này. Khi bit I trong thanh ghi trạng thái SREG, bit TICIE1 (Timer/Counter1 Input Capture Interrupt Enable) và bit ICF1 đợc thiết lập, ngắt bắt lu giữ đầu vào T/C1 đợc thực hiện.

Bit 4 - OCF1A : Bit cờ so sánh A đầu ra của T/C1 (Output Compare Flag 1A) Bit OCF1A đợc thiết lập khi xuất hiện tín hiệu so sánh bằng giữa T/C1 và dữ liệu trong OCR1A (Output Compare Register 1A). Bit OCF1A đợc xoá bởi phần cứng khi thực hiện chơng trình điều khiển vector ngắt tơng ứng. Cũng có thể xoá bit OCF1A bằng cách ghi giá trị 1 vào vị trí cờ này. Khi bit I trong

Một phần của tài liệu thiết kế hệ thống phần mềm cho C AT90S8535 (Trang 26 - 34)