Cơ chế được sử dụng để bảo vệ thanh ghi trạng thái, sreg, trong bộ vi điều khiển AVR là gì? RETI
ngụ ý rằng các bit này không nằm trong ngăn xếp. Là một trong những mục đích chung đăng ký cũng sreg hoặc một cái gì đó như thế?Bảo quản sreg trong AVR ngắt
8
A
Trả lời
11
Điều này được giải thích trong mọi biểu dữ liệu AVR. Ví dụ trên trang 8 của số ATtiny2313 datasheet nó nói:
Thanh ghi trạng thái không tự động được lưu khi nhập gián đoạn. Điều này phải được xử lý bằng phần mềm.
Bạn có thể đạt được điều này bằng cách lưu trữ nó trong một thanh ghi tạm thời:
interrupt:
in r16, SREG ; save SREG
...
out SREG, r16 ; restore SREG
reti
Cũng lưu ý rằng nếu bạn đang truy cập đăng ký mà không được độc quyền sử dụng trong thói quen ngắt này, bạn cần phải lưu những, quá. Ngoài ra bạn còn có thể đẩy giá trị của SREG để ngăn xếp nếu bạn thấp trên thanh ghi:
interrupt:
push r16 ; save global registers on stack
push r17
push r18
in r16, SREG ; save SREG
push r16 ; do this if you want to use r16 in your interrupt routine
...
pop r16 ; do this if you pushed SREG above
out SREG, r16 ; restore SREG
pop r18 ; restore global registers
pop r17
pop r16
reti
Để biết thêm thông tin tìm here.
1
Ngoài ra
PUSH Rn
LDS Rn, SREG
PUSH Rn
và
POP Rn
STS SREG, Rn
POP Rn
có vẻ là hợp lệ.
Thanh ghi trạng thái không phải là mục đích chung. Nó nằm trong tập tin đăng ký I/O và có thể được truy cập bằng cách sử dụng lệnh 'in' và' out'. –