AVRマイクロコントローラーのステータスレジスタsregを保持するために使用されるメカニズムは何ですか? RETI
これらのビットがスタック上にないことを意味します。汎用レジスタの1つは、sregまたはそのようなものでもありますか?
13584 次
2 に答える
13
これはすべてのAVRデータシートで説明されています。たとえば、ATtiny2313データシートの8ページには、次のように記載されています。
ステータスレジスタは、割り込みルーチンに入るときに自動的に保存されず、割り込みから戻るときに復元されません。これはソフトウェアで処理する必要があります。
これは、一時レジスタに保存することで実現できます。
interrupt:
in r16, SREG ; save SREG
...
out SREG, r16 ; restore SREG
reti
また、この割り込みルーチンで排他的に使用されていないレジスタにアクセスしている場合は、それらも保存する必要があることに注意してください。さらに、レジスタが不足している場合は、SREGの値をスタックにプッシュできます。
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
詳細については、こちらをご覧ください。
于 2012-01-18T09:24:54.963 に答える
1
あるいは
PUSH Rn
LDS Rn, SREG
PUSH Rn
と
POP Rn
STS SREG, Rn
POP Rn
有効なようです。
于 2015-08-14T06:25:12.057 に答える