2012-01-17 25 views
8

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

+1

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'. –

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 

POP Rn 
STS SREG, Rn 
POP Rn 

có vẻ là hợp lệ.

Các vấn đề liên quan