Kết quả thực nghiệm!
Trong khi các câu trả lời khác là chu đáo và lý luận tốt, tất cả chúng đều không đầy đủ hoặc chỉ là phỏng đoán. Trường hợp tài liệu không rõ ràng, chúng tôi phải thử nghiệm và chúng tôi phải kiểm tra mọi trường hợp.
Câu hỏi này xứng đáng có câu trả lời kết luận, vì vậy, hãy rút ra một AVR và bắt đầu thiết lập một số bit!
Thủ tục
Để kiểm tra, tôi đã tạo ra một chương trình Arduino (ATMEGA328P) nhỏ có thể ...
- thiết lập ISR sẽ không bao giờ quay lại (
while (1)
)
- đã gán ISR cho một nguồn mà tôi có thể kích hoạt trong phần mềm (
INT0
sắp hết)
- ngắt vô hiệu hóa
- kích hoạt và kích hoạt ngắt để nó sẽ chờ xử lý
Tôi đã sử dụng một giường thử nghiệm sẽ bật đèn LED trong một hướng dẫn sau khi ngắt được bật. Bằng cách thử các cách khác nhau để kích hoạt các ngắt trên giường thử nghiệm và kiểm tra đèn LED, tôi có thể biết liệu lệnh sau khi lệnh kích hoạt có được thực thi hay không.
Nếu đèn LED không sáng, thì tôi biết rằng ISR đã thực thi (và bị khóa) ngay lập tức sau khi ngắt được bật.
Nếu đèn LED bật sáng, thì tôi biết rằng lệnh tiếp theo được phép thực thi trước khi ISR được gọi.
Các kết quả
SEI
hướng dẫn (trường hợp cơ sở)
Mã số:
sei
Kết quả: LED bật. Thực hiện theo hướng dẫn.
OUT
chỉ dẫn
Mã số:
in r16,0x3f // Get SREG
ori r16,128 // Set I bit
out 0x3f,r16 // Save back to SREG
Kết quả:
Đèn LED bật. Thực hiện theo hướng dẫn.
ST
chỉ dẫn
Mã số:
clr r29 // Clear Y high byte
ldi r28,0x5f // Set Y low byte to point to SREG
ld r16, Y // Get SREG
ori r16,128 // Set I bit
st Y,r16 // Put SREG
Kết quả:
Đèn LED bật. Thực hiện theo hướng dẫn.
Phần kết luận!
Q: Chờ đợi là một tính năng của hướng dẫn SEI hoặc thanh ghi trạng thái?
Trả lời: Có vẻ như việc thay đổi I
bit trong SREG
là từ a 0
sang a 1
sẽ cho phép lệnh sau thực hiện tiếp theo ngay cả khi có một ngắt đang chờ xử lý, bất kể lệnh nào được sử dụng để đặt bit.
Ghi chú
Điều này thực sự biến thành một câu hỏi rất thú vị với nhiều biến chứng. Nếu bạn quan tâm đến anh ấy chi tiết, hãy xem ...
http://wp.josh.com/2016/01/05/different-ways-to-set-i-bit-in-avr-sreg-besides-sei/