1. Trang chủ
  2. » Thể loại khác

Chapter6 Ngat&LapTrinhNgat V2q

24 320 2

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 24
Dung lượng 684,23 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Chapter6 Ngat&LapTrinhNgat V2q tài liệu, giáo án, bài giảng , luận văn, luận án, đồ án, bài tập lớn về tất cả các lĩnh v...

Trang 1

CHƯƠNG 6: NGẮT VÀ LẬP TRÌNH ỨNG DỤNG NGẮT

Mục đích của chương này sẽ giúp người đọc có khả năng:

 Giải thích được ý nghĩa các ngắt và reset

 Mô tả các thủ tục xử lý cho các ngắt và các reset

 Lập trình điều khiển cho phép hay không cho phép các ngắt ẩn

 Lập trình đặt tính ưu tiên ngắt của PIC18 ở mức độ cao hoặc thấp

6.1.1 Ngắt là gì?

Ngắt là một sự kiện yêu cầu CPU ngừng thi hành chương trình thông thường để thực hiện sự phục vụ nào đó có quan hệ với sự kiện Ngắt có thể được phát sinh ở bên trong chip hay bên ngoài chip Ngắt ngoài được phát ra bởi mạch điện bên ngoài xác nhận một tín hiệu ngắt đến CPU Ngắt nội có thể được phát ra bởi mạch điện bên trong chip hay phát nguyên từ

những lỗi phần mềm Trong nhiều VĐK (như PIC18), các bộ định thời, các chức năng giao

tiếp vào/ra và CPU được tích hợp trong cùng một chip Vì vậy, những hệ thống phụ này có thể sinh ra các ngắt cho CPU Những tình huống khác thường xảy ra trong suốt thời gian thi

hành chương trình, chẳng hạn thiếu mã lệnh (opcode), xuất hiện tràn trên (overflow), tràn dưới (underflow), chia cho 0, được gọi là các ngắt phần mềm

6.1.2 Khả năng ẩn của ngắt

Tuỳ thuộc vào tình huống và ứng dụng, một vài ngắt có thể không mong muốn hay được cần và nên được ngăn chặn từ việc ngắt CPU Hầu hết các bộ vi xử lý và VĐK có sự lựa chọn

để phớt lờ các ngắt này Những loại ngắt này được gọi là ngắt ẩn (maskable interrrupt) Một

chương trình có thể yêu cầu CPU phục vụ hoặc phớt lờ ngắt ẩn bằng cách đặt hoặc xoá bit cho phép Khi một ngắt được cho phép, CPU sẽ đáp ứng để nó xảy ra Khi ngắt được xoá, CPU sẽ bỏ qua nó

Trang 2

6.1.3 Độ ưu tiên của ngắt

Nếu một máy tính đang được hỗ trợ nhiều nguồn ngắt, khi đó có thể nhiều ngắt sẽ bị treo tại cùng thời điểm CPU phải ra quyết định ngắt nào sẽ nhận phục vụ trước tiên trong tình huống này Giải pháp trong trường hợp này là phân mức độ ưu tiên cho tất cả các nguồn ngắt Một ngắt có độ ưu tiên cao hơn luôn được thực hiện trước các ngắt có độ ưu tiên thấp hơn

6.1.4 Thủ tục phục vụ ngắt

CPU cung cấp nhiệm vụ đối với ngắt bằng cách thi hành một chương trình được gọi là thủ tục phục vụ ngắt Sau đó, CPU phải hồi phục lại sự thi hành chương trình bình thường Như vậy, câu hỏi đặt ra là: “CPU dừng thi hành chương trình và hồi phục lại chương trình trong bao lâu?” Nó hoàn thành điều này bằng cách lưu bộ đếm chương trình và thông tin trạng thái CPU trước khi thực hiện thủ tục phục vụ ngắt và sau đó khôi phục bộ đếm chương trình và trạng thái CPU đã lưu trước khi thoát ra thủ tục phục vụ ngắt Chu trình phục vụ ngắt trọn vẹn bao gồm:

(1) Lưu giá trị bộ đếm chương trình

(2) Lưu trữ trạng thái CPU (bao gồm thanh ghi trạng thái CPU và một vài thanh ghi khác) vào ngăn xếp

(3) Nhận dạng loại ngắt

(4) Quyết định địa chỉ bắt đầu của thủ tục phục vụ ngắt tương ứng

(5) Thực thi thủ tục phục vụ ngắt

(6) Khôi phục trạng thái CPU từ ngăn xếp

(7) Khôi phục bộ đếm chương trình từ ngăn xếp

(8) Hồi phục chương trình đã được ngắt

Đối với ngắt cứng ẩn, bộ vi xử lý bắt đầu cung cấp sự phục vụ khi nó hoàn tất sự thi

hành của lệnh hiện tại (lệnh đang được thực thi khi ngắt xảy ra) Trong một vài ngắt không

ẩn (nonmaskable interrupt), CPU phải bắt đầu phục vụ mà không cần hoàn thành lệnh hiện

hành

6.1.5 Vector ngắt

Để quy định phục vụ một ngắt, bộ xử lý phải biết địa chỉ đang bắt đầu của thủ tục phục

vụ Địa chỉ bắt đầu của thủ tục phục vụ ngắt được gọi là vector ngắt Vector ngắt có thể được

định rõ bằng một trong các phương pháp sau:

(1) Được ấn định trước: ở phương pháp này, địa chỉ bắt đầu của thủ tục phục vụ được ấn

định trước từ lúc bộ vi xử lý (VXL) được thiết kế chế tạo Bộ xử lý sẽ nhảy tới vị trí

Trang 3

được chỉ định trước để thi hành thủ tục phục vụ Tất cả bộ VĐK của Microchip và VĐK 8051 sử dụng phương pháp này

(2) Lấy lại vector từ vị trí bộ nhớ được ấn định trước: đối với các bộ VXL và VĐK, vector ngắt cho mỗi nguồn ngắt được lưu tại một vị trí đã được ấn định Vùng các vị trí bộ nhớ nơi mà tất cả các vector ngắt được lưu được quy như bảng vector ngắt

(3) Thi hành một quá trình thừa nhận ngắt để lấy lại một con số vector hợp lệ cho vị trí vector ngắt: trong suốt quá trình thừa nhận ngắt, bộ VXL thực hiện đọc chu kỳ bus và thiết bị vào/ra bên ngoài mà bị yêu cầu ngắt đặt một số trên bus dữ liệu để tự nhận dạng

nó Con số này được gọi con số vector ngắt Địa chỉ của vị trí bộ nhớ nơi vector ngắt

được lưu thì thường là tổng của bội số (thường là 2, 4) của số vector ngắt và địa chỉ

bắt đầu trong bảng vector ngắt CPU cần hoàn thành một chu kỳ đọc hợp lệ để nhận được một vector ngắt

tục này sử dụng lệnh quay về sau khi thực hiện ngắt là retfie thay vì lệnh return như thủ

tục phụ thông thường Về nguyên tắc, chương trình thủ tục phục vụ ngắt phải ngắn đến mức có thể Thủ tục phục vụ ngắt có thể đơn giản làm tăng hay giảm một biến và trả lại kết quả Trong ví dụ sau, chuỗi lệnh phục vụ thủ tục ngắt đối với ngắt chân INT0 của PIC18:

Khởi tạo bảng vector ngắt

Chẳng hạn, đặt địa chỉ bắt đầu cho mỗi thủ tục phục vụ ngắt trong bảng Điều này có

thể được thực hiện bằng cách sử dụng chỉ dẫn hợp dịch org:

org 0xkk

Trang 4

dw ISR_1

dw ISR_2

với ISR_i là địa chỉ bắt đầu của thủ tục phục vụ cho nguồn ngắt thứ i Ở bước này thì không cần thiết đối họ PIC18 vì các vị trí vector ngắt đã được ấn định

Có ít nhất hai loại reset trong mỗi bộ VXL: reset khởi nguồn và reset tay Reset cấp nguồn cho phép bộ VXL thiết lập các giá trị ban đầu khi nguồn điện vừa mới cung cấp cho

nó Reset tay cho phép máy tính thoát ra khỏi hầu hết các điều kiện lỗi (ngoại trừ lỗi phần cứng) và thiết lập lại các điều kiện ban đầu

6.3 NGẮT VÀ CÁC THANH GHI NGẮT CỦA PIC 18F4550

PIC 18F4550 là VĐK có nhiều nguồn ngắt tổ hợp và có tính năng ngắt ưu tiên cho phép mỗi nguồn ngắt được cho phép ngắt ưu tiên cao hay ưu tiên thấp Ngắt ưu tiên cao xảy ra cho

dù có bất kỳ ngắt ưu tiên thấp nào đang được thực hiện Vector ngắt ưu tiên cao tại địa chỉ

0x08, vector ngắt ưu tiên thấp tại 0x18

Có 10 thanh ghi được sử dụng để điều khiển hoạt động ngắt, các thanh ghi đó là: RCON, INTCON, INTCON2, INTCON3, PIR1, PIR1, PIE1, PIE2, IPR1, IPR2

Mỗi nguồn ngắt có 3 bit chính điều khiển hoạt động ngắt của nó:

− Bit Flag (cờ) báo hiệu có sự kiện ngắt xảy ra

− Bit Enable (cho phép) cho phép chương trình thực thi rẻ nhánh đến địa chỉ của vector

ngắt khi bit flag được đặt

− Bit Priority (ưu tiên) chọn mức ưu tiên ngắt là cao hay thấp

Chức năng ưu tiên ngắt được cho phép bằng cách đặt bit IPEN (bit RCON<7>) Khi có

ưu tiên ngắt được cho phép, có hai bit được dùng để cho phép ngắt toàn cục

Đặt bit GIEH (bit INTCON<7>) cho phép tất cả các ngắt có bit ưu tiên được đặt

(ưu tiên cao)

Trang 5

Đặt bit GIEL (bit INTCON<6>) cho phép tất cả các ngắt có bit ưu tiên bị xóa (ưu

tiên thấp)

Khi bit cờ, bit cho phép, bit cho phép ngắt toàn cục được đặt thì ngắt sẽ trỏ đến địa chỉ 000008h hoặc 000018h tùy theo bit ưu tiên được đặt Các ngắt độc lập cũng có thể bị vô hiệu

thông qua các bit cho phép tương ứng Khi bit IPEN bằng 0 ứng với trạng thái mặc định, chức

năng ưu tiên ngắt bị vô hiệu

Nguồn ngắt ưu tiên cao có thể ngắt các ngắt có mức ưu tiên thấp hơn, khi đó ngắt ưu tiên thấp sẽ không được thực hiện cho đến khi ngắt ưu tiên cao được thực hiện xong

Hình 6.1: cấu trúc khối ngắt 6.3.1 Thanh ghi điều khiển ngắt INTCON

Thanh ghi INTCON là thanh ghi cho phép ghi và đọc, chứa các bit flag, enable và ngắt

ưu tiên

Hình 6.2: thanh ghi INTCON

Bit 7 - GIE/GIEH: bit cho phép ngắt toàn cục

Trang 6

1 = Cho phép tất cả các ngắt không ẩn

0 = Vô hiệu tất cả các ngắt

Khi IPEN = 1

1 = Cho phép tất cả các ngắt ưu tiên cao

0 = Vô hiệu tất cả các ngắt có ưu tiên cao

Bit 6 - PEIE/GIEL: bit cho phép ngắt ngoại vi

Khi IPEN = 0

1 = Cho phép tất cả các ngắt ngoại vi không ẩn

0 = Vô hiệu tất cả các ngắt ngoại vi

Khi IPEN = 1

1 = Cho phép tất cả các ngắt ngoại vi ưu tiên cao

0 = Vô hiệu tất cả các ngắt ngoại vi có ưu tiên cao

Bit 5 - TMR0IE : bit cho phép ngắt tràn TMR0

1 = Cho phép ngắt tràn TMR0

0 = Không cho phép ngắt tràn TMR0

Bit 4 - INT0IE: bit cho phép ngắt ngoài INT0

1 = Cho phép ngắt ngoài INT0

0 = Không cho phép ngắt ngoài INT0

Bit 3 - RBIE: bit cho phép ngắt chuyển trạng thái các chân PORTB

1 = Cho phép ngắt ngắt chuyển trạng thái các chân PORTB

0 = Không cho phép ngắt chuyển trạng thái các chân PORTB

Bit 2 - TMR0IF: bit cờ (flag bit) ngắt tràn TMR0

1 = Thanh ghi TMR0 tràn (chỉ được xóa bằng phần mềm)

0 = Thanh ghi TMR0 không tràn

Bit 1 - INT0IF: bit cờ ngắt ngoài INT0

1 = Ngắt ngoài INT0 xảy ra (chỉ được xóa bằng phần mềm)

0 = Ngắt ngoài INT0 không xảy ra

Bit 0 - RBIF: bit cờ ngắt chuyển trạng thái các chân PORTB

1 = Ít nhất một trong các chân RB7:RB4 chuyển trạng thái (chỉ được xóa bằng phần mềm)

Trang 7

0 = Các chân RB7:RB4 không chuyển trạng thái

6.3.2 Thanh ghi điền khiển ngắt INTCON2

Thanh ghi INTCON2 được mô tả như hình 6.3

Hình 6.3: thanh ghi INTCON2

Bit 7 - 𝐑𝐁𝐏𝐔̅̅̅̅̅̅̅̅: bit cho phép kéo trạng thái PORTB

1 = Không cho phép kéo trạng thái PORTB

0 = Cho phép kéo trạng thái PORTB bằng các giá trị chốt port riêng

Bit 6 - INTEDG0: bit chọn sườn clock cho ngắt ngoài 0

1 = Ngắt bằng sườn lên của xung clock

0 = Ngắt bằng sườn xuống của xung clock

Bit 5 - INTEDG1: bit chọn sườn clock cho ngắt ngoài 1

1 = Ngắt bằng sườn lên của xung clock

0 = Ngắt bằng sườn xuống của xung clock

Bit 4 - INTEDG2: bit chọn sườn clock cho ngắt ngoài 2

1 = Ngắt bằng sườn lên của xung clock

0 = Ngắt bằng sườn xuống của xung clock

Bit 3 bit không sử dụng, xem như là bit ‘0’

Bit 2 - TMR0IP: bit ưu tiên ngắt tràn TMR0

1 = Ưu tiên cao

0 = Ưu tiên thấp

Bit 1: bit không sử dụng, xem như là bit ‘0’

Bit 0 - RBIP: bit ưu tiên ngắt chuyển trạng thái các chân PORTB

1 = ưu tiên cao

0 = ưu tiên thấp

6.3.3 Thanh ghi điều khiển ngắt INTCON3

Thanh ghi INTCON3 được mô tả như hình 6.4

Trang 8

Hình 6.4: thanh ghi INTCON3

Bit 7 - INT2IP: bit ưu tiên ngắt ngoài INT2

1 = Ưu tiên cao

0 = Ưu tiên thấp

Bit 6 - INT1IP: bit ưu tiên ngắt ngoài INT1

1 = Ưu tiên cao

0 = Ưu tiên thấp

Bit 5: bit không sử dụng, xem như là bit ‘0’

Bit 4 - INT2IE: bit cho phép ngắt ngoài INT2

1 = Cho phép ngắt ngoài INT2

0 = Không cho phép ngắt ngoài INT2

Bit 3 - INT1IE: bit cho phép ngắt ngoài INT1

1 = Cho phép ngắt ngoài INT1

0 = Không cho phép ngắt ngoài INT1

Bit 2: bit không sử dụng, xem như là bit ‘0’

Bit 1 - INT2IF: bit cờ ngắt ngoài INT2

1 = Ngắt ngoài INT2 xảy ra

0 = Ngắt ngoài INT2 không xảy ra

Bit 0 - INT1IF: bit cờ ngắt ngoài INT1

1 = Ngắt ngoài INT1 xảy ra

0 = Ngắt ngoài INT1 không xảy ra

6.3.4 Các thanh ghi PIR

Thanh ghi PIR (Peripheral Interrupt Request) chứa các bit cờ riêng cho các ngắt ngoại

vi, có hai thanh ghi điều khiển ngắt ngoại vi là PIR1 và PIR2

Thanh ghi PIR1

Hình 6.5: thanh ghi PIR1

Trang 9

Bit 7 - SPPIF: bit cờ ngắt ghi/đọc port song song

1 = Quá trình ghi hoặc đọc đang diễn ra (xóa bằng phần mềm)

0 = Không có ghi hoặc đọc

Bit 6 - ADIF: bit cờ ngắt chuyển đổi ADC

1 = Chuyển đổi ADC hoàn thành (xóa bằng phần mềm)

0 = Chuyển đổi ADC chưa hoàn thành

Bit 5 - RCIF: bit cờ ngắt nhận dữ liệu EUSART

1 = Bộ đệm nhận dữ liệu RCREG đã đầy (xóa khi RCREG được đọc)

0 = Bộ đệm nhận dữ liệu RCREG trống

Bit 4 - TXIF: bit cờ ngắt truyền dữ liệu EUSART

1 = Bộ đệm truyền dữ liệu TXREG trống (xóa khi TXREG được đọc)

0 = Bộ đệm nhận dữ liệu TXREG đã đầy

Bit 3 - SSPIF: bit cờ ngắt truyền dữ liệu Port nối tiếp đồng bộ chính

1 = Hoạt động truyền/nhận dữ liệu hoàn tất

0 = Chờ truyền/nhận dữ liệu

Bit 2 - CCP1IF : bit cờ ngắt CCP1

Chế độ Capture:

1 = Quá trình capture thanh ghi TMR1 xảy ra

0 = Không có quá trình capture thanh ghi TMR1 nào xảy ra

Chế độ Compare:

1 = Quá trình so sánh thanh ghi TMR1 xảy ra

0 = Không có quá trình so sánh thanh ghi TMR1 nào xảy ra

Trang 10

0 = Thanh ghi TMR1 không tràn

Lưu ý, các bit cờ được đặt khi điều kiện ngắt xảy ra bất chấp trạng thái của bit cho phép

tương ứng của nó hay bit cho phép ngắt toàn cục GIE (INTCON<7>)

Thanh ghi PIR2

Hình 6.6: thanh ghi PIR2

Bit 7 - OSCFIF: bit cờ ngắt lỗi tạo dao động

1 = Bộ tạo dao động hệ thống bị lỗi, xung clock ngõ vào chuyển thành

INTOSC (xóa bằng phần mềm)

0 = Xung clock hệ thống đang hoạt động

Bit 6 - CMIF: bit cờ ngắt bộ so sánh

1 = Ngõ vào bộ so sánh thay đổi (xóa bằng phần mềm)

0 = Ngõ vào bộ so sánh không thay đổi

Bit 5 - USBIF: bit cờ ngắt USB

1 = Có yêu cầu ngắt USB (xóa bằng phần mềm)

0 = Không có yêu cầu ngắt USB

Bit 4 - EEIF: bit cờ ngắt hoạt động ghi dữ liệu trên bộ nhờ EEPROM/FLASH

1 = Quá trình ghi hoàn tất (xóa bằng phần mềm)

0 = Quá trình ghi không hoàn tất hay không được bắt đầu

Bit 3 - BCLIF: bit cờ ngắt xung đột trên bus

1 = Xung đột trên bus xảy ra (xóa bằng phần mềm)

0 = Không có xung đột trên bus

Bit 2 - HLVDIF: bit cờ ngắt phát hiện điện áp cao/thấp

1 = Xảy ra tình trạng điện áp cao/thấp (xóa bằng phần mềm)

0 = Không xảy ra tình trạng điện áp cao/thấp

Bit 1 - TMR3IF: bit cờ ngắt tràn TMR3

1 = Thanh ghi TMR3 tràn (xóa bằng phần mềm)

0 = Thanh ghi TMR3 không tràn

Trang 11

Bit 0 - CCP2IF: bit cờ ngắt CCP2

Chế độ Capture:

1 = Quá trình capture thanh ghi TMR1 hoặc TMR3 xảy ra

0 = Không có quá trình capture thanh ghi TMR1 hoặc TMR3 nào xảy ra

Chế độ Compare:

1 = Quá trình compare thanh ghi TMR1 hoặc TMR3 xảy ra

0 = Không có quá trình so sánh thanh ghi TMR1 hoặc TMR3 nào xảy ra

Chế độ PWM:

Không áp dụng trong chế độ PWM

6.3.5 Các thanh ghi cho phép ngắt ngoại vi PIE

Thanh ghi PIE (Peripheral Interrupt Enable) chứa các bit cho phép riêng cho các ngắt

ngoại vi, có hai thanh ghi cho phép ngắt ngoại vi PIE1 và PIE2 Khi IPEN = 0 thì bit PEIE phải được đặt để cho phép các ngắt ngoại vi bất kỳ

Thanh ghi PIE1

Hình 6.7: thanh ghi PIE1

Bit 7 - SPPIE: bit cho phép ngắt ghi/đọc port song song

1 = Cho phép ngắt ghi/đọc port song song

0 = Không cho phép ngắt ghi/đọc port song song

Bit 6 - ADIE: bit cho phép ngắt chuyển đổi ADC

1 = Cho phép ngắt chuyển đổi ADC

0 = Không cho phép ngắt chuyển đổi ADC

Bit 5 - RCIE: bit cho phép ngắt nhận dữ liệu EUSART

1 = Cho phép ngắt nhận dữ liệu EUSART

0 = Không cho phép ngắt nhận dữ liệu EUSART

Bit 4 - TXIE: bit cho phép ngắt truyền dữ liệu EUSART

1 = Cho phép ngắt truyền dữ liệu EUSART

0 = Không cho phép ngắt truyền dữ liệu EUSART

Bit 3 - SSPIE: bit cho phép ngắt truyền dữ liệu Port nối tiếp đồng bộ chính

Trang 12

1 = Cho phép ngắt truyền dữ liệu Port nối tiếp đồng bộ chính

0 = Không cho phép ngắt truyền dữ liệu Port nối tiếp đồng bộ chính

Bit 2 - CCP1IE: bit cho phép ngắt CCP1

Thanh ghi PIE2

Hình 6.8: thanh ghi PIE2

Bit 7 - OSCFIE: bit cho phép ngắt lỗi tạo dao động

Trang 13

6.3.6 Thanh ghi điều khiển reset

Thanh ghi IPR chứa các bit cờ dùng để xác định nguyên nhân của lần reset trước đó

hoặc đánh thức (wake-up) khỏi chế độ Idle hoặc Sleep Thanh ghi RCON (Reset Control Register) này cũng chứa bit IPEN cho phép ưu tiên ngắt

Hình 6.9: thanh ghi RCON

Bit 7 - IPEN: bit cho phép ưu tiên ngắt

1 = cho phép các mức độ ưu tiên ngắt

0 = không cho phép các mức độ ưu tiên ngắt

Bit 6 - SBOREN: bit cho phép BOR bằng phần mềm

Bit 5: không sử dụng, xem như bit ‘0’

Bit 4 - 𝐑𝐈̅̅̅: bit cờ chỉ thị reset

Bit 3 - 𝐓𝐎̅̅̅̅: bit cờ watchdog time-out

Bit 2 - 𝐏𝐃̅̅̅̅ : bit cờ phát hiện Power-down

Bit 1 - 𝐏𝐎𝐑̅̅̅̅̅̅: bit trạng thái reset power-on

Bit 0 - 𝐁𝐎𝐑̅̅̅̅̅̅: bit trạng thái reset brown-out

Chú ý: nếu bit SBOREN được cho phép (SBOREN = 1) thì trạng thái reset của nó bằng

1, ngược lại là 0 Giá trị reset thực tế của 𝐏𝐎𝐑̅̅̅̅̅̅ được xác định bằng kiểu reset chip

Ngày đăng: 21/12/2017, 12:19

TỪ KHÓA LIÊN QUAN

w