Tôi phát triển một ứng dụng C với atmega168a-pu và ngắt. Tôi sử dụng các ngắt sau:Lập trình AVR, xử lý ngắt
ISR(TIMER0_COMPA_vect);
ISR(TIMER0_COMPB_vect);
ISR (TIMER2_COMPA_vect);
ISR(SPI_STC_vect);
ISR(TIMER1_COMPA_vect);
ISR (PCINT1_vect);
và mã của tôi trông giống như
int main(void){
///initialization etc.
sei();
while(1){
///do some stuff and wait the interrupts
}
return 0;
}
tôi muốn chặn tất cả các ngắt khác khi một ngắt xảy ra và cho phép các ngắt ngay trước khi thoát khỏi chức năng ngắt.
Bạn có thể giải thích về đoạn mã mà tôi có thể làm được không?
CHỈNH SỬA: http://www.nongnu.org/avr-libc/user-manual/optimization.html#optim_code_reorder nêu rõ rằng việc sử dụng đó gây ra vấn đề về kích hoạt lại.
function(){
cli();
..
sei();
}
chính xác làm thế nào để bạn vô hiệu hóa và cho phép ngắt toàn cục mà không gây ra bất kỳ sự cố nào? –
Những người downvoters có thể giải thích cho họ downvote không? Johan đã thêm gợi ý vào mô tả lỗi khoảng 8 phút sau khi tôi đăng bài. – junix
@JohanElmander Tôi đã cập nhật câu trả lời cho câu hỏi đã sửa đổi của bạn. – junix